En MariaDB, el IFNULL()
La función nos permite reemplazar valores NULL con otro valor.
Sintaxis
IFNULL(expr1,expr2)
Si expr1
no es NULL
, IFNULL()
devuelve expr1
; de lo contrario, devuelve expr2
.
Además, desde MariaDB 10.3, NVL()
se puede usar como un alias para IFNULL()
función. Por lo tanto, tenemos la opción de usar la siguiente sintaxis en su lugar:
NVL(expr1,expr2)
El resultado es el mismo independientemente de la sintaxis utilizada.
Ejemplo
Aquí hay un ejemplo básico que usa NULL
constante:
SELECT IFNULL( null, 'No Value' );
Resultado:
No Value
En este caso, usé IFNULL()
para reemplazar el valor NULL con No Value
.
Esto es lo que sucede cuando el primer argumento no es NULL
:
SELECT IFNULL( 'Spicy', 'No Value' );
Resultado:
Spicy
En este caso, se devuelve el primer argumento, porque no es NULL
.
Ejemplo de base de datos
Supongamos que ejecutamos la siguiente consulta:
SELECT * FROM Employees;
Resultado:
empId name dept ----- ----- ----- 1 Jess Sales 2 Rohit NULL 3 Zohan Sales 4 Homer NULL
Podemos ver que dos filas tienen valores NULL en el dept
columna.
En la siguiente consulta, usamos IFNULL()
para reemplazar los valores NULL con un valor más significativo para el lector:
SELECT
empId,
name,
IFNULL( dept, 'Not yet assigned' ) AS dept
FROM Employees;
Resultado:
empId name dept ----- ----- ---------------- 1 Jess Sales 2 Rohit Not yet assigned 3 Zohan Sales 4 Homer Not yet assigned
Expresiones
Se evalúa el valor actual del primer argumento. Por lo tanto, si proporcionamos una expresión como la siguiente:
SELECT IFNULL( 3 * 7, 0 );
Obtenemos esto:
21
Entonces, no obtenemos el 3 * 7
parte. Obtenemos el resultado de esa expresión (que en este caso es 21
).
Lo mismo ocurre cuando el resultado de la expresión es NULL
. Por ejemplo, si ejecutamos el siguiente código:
SELECT IFNULL( 3 / 0, 0 );
Obtenemos esto:
0.0000
Sin embargo, este es un ejemplo peligroso. Cero es un valor. NULL
no es.
Devolver cero cuando hay un valor NULL podría ser engañoso o incluso completamente erróneo. Imagínense si estuviéramos tratando con precios. Podríamos terminar con un precio de cero, lo que podría ser incorrecto y costarle mucho dinero a la empresa.
Por lo tanto, en tales casos, generalmente es mejor usar un valor más significativo que transmita al lector que no hay valor.
Ejemplo:
SELECT IFNULL( 3 / 0, 'No value' );
Resultado:
No value
El NVL()
Función
A partir de MariaDB 10.3, NVL()
es un alias para IFNULL()
. Por lo tanto, podemos reemplazar IFNULL()
con NVL()
en cualquiera de los ejemplos anteriores.
Ejemplo:
SELECT NVL( 3 / 0, 'No value' );
Resultado:
No value