sql >> Base de Datos >  >> RDS >> Mysql

MySQL IFNULL() explicado

MySQL tiene un IFNULL() función que nos permite reemplazar fácilmente valores NULL con otro valor.

Sintaxis

IFNULL(expr1,expr2)

Si expr1 no es NULL , IFNULL() devuelve expr1 ; de lo contrario, devuelve expr2 .

Ejemplo

Aquí hay un ejemplo básico que usa NULL constante:

SELECT IFNULL( null, 'n/a' );

Resultado:

n/a

En este caso, usé IFNULL() para reemplazar el valor NULL con la cadena n/a .

Esto es lo que sucede cuando el primer argumento no es NULL :

SELECT IFNULL( 'Cow', 'n/a' );

Resultado:

Cow

En este caso, se devuelve el primer argumento, porque no es NULL .

Ejemplo de base de datos

Supongamos que ejecutamos la siguiente consulta:

SELECT
    PetName,
    DOB
FROM Pets;

Resultado:

+---------+------------+
| PetName | DOB        |
+---------+------------+
| Fluffy  | 2020-11-20 |
| Fetch   | 2019-08-16 |
| Scratch | 2018-10-01 |
| Wag     | 2020-03-15 |
| Tweet   | 2020-11-28 |
| Fluffy  | 2020-09-17 |
| Bark    | NULL       |
| Meow    | NULL       |
| Woof    | 2020-10-03 |
| Ears    | 2022-01-11 |
+---------+------------+

Podemos ver que dos filas tienen valores NULL en la columna DOB.

En la siguiente consulta, usamos IFNULL() para reemplazar los valores NULL con un valor más significativo para el lector:

SELECT
    PetName,
    IFNULL( DOB, 'None supplied' )
FROM Pets;

Resultado:

+---------+--------------------------------+
| PetName | IFNULL( DOB, 'None supplied' ) |
+---------+--------------------------------+
| Fluffy  | 2020-11-20                     |
| Fetch   | 2019-08-16                     |
| Scratch | 2018-10-01                     |
| Wag     | 2020-03-15                     |
| Tweet   | 2020-11-28                     |
| Fluffy  | 2020-09-17                     |
| Bark    | None supplied                  |
| Meow    | None supplied                  |
| Woof    | 2020-10-03                     |
| Ears    | 2022-01-11                     |
+---------+--------------------------------+

Expresiones

Se evalúa el valor actual del primer argumento. Por lo tanto, si proporcionamos una expresión como la siguiente:

SELECT IFNULL( 2 * 5, 0 );

Obtenemos esto:

10

Entonces, no obtenemos el 2 * 5 parte. Obtenemos el resultado de esa expresión (que en este caso es 10 ).

Lo mismo ocurre cuando el resultado de la expresión es NULL :

SELECT IFNULL( 2 / 0, 0 );

Obtenemos esto:

0.0000

Sin embargo, vale la pena tener cuidado. Cero es un valor. NULL no es.

En el ejemplo anterior, devolví cero cuando había un valor NULL, pero esto podría ser engañoso o incluso completamente incorrecto. Imagínese si estuviéramos dividiendo precios y el resultado fuera un precio de cero. Bien, si estamos dividiendo un precio por cero, probablemente haya algo más mal, pero estoy seguro de que entiendes mi punto.

En cualquier caso, normalmente es mejor utilizar un valor más significativo que le transmita al lector que no hay ningún valor.

Ejemplo:

SELECT IFNULL( 2 / 0, 'No value' );

Resultado:

No value