Desde MariaDB 10.3, NVL()
se puede usar como un alias para IFNULL()
función. Por lo tanto, ambas funciones nos permiten reemplazar valores NULL con otro valor.
Sintaxis
NVL(expr1,expr2)
Si expr1
no es NULL
, NVL()
devuelve expr1
; de lo contrario, devuelve expr2
.
Dado NVL()
es un alias para IFNULL()
, también podemos usar la siguiente sintaxis:
IFNULL(expr1,expr2)
Ambas sintaxis anteriores devuelven el mismo resultado.
Ejemplo
Aquí hay un ejemplo básico que usa NULL
constante:
SELECT NVL( null, 'No Value' );
Resultado:
No Value
En este caso, usé NVL()
para reemplazar el valor NULL con No Value
.
Esto es lo que sucede cuando el primer argumento no es NULL
:
SELECT NVL( 'Spicy', 'No Value' );
Resultado:
Green
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 NVL()
para reemplazar los valores NULL con un valor más significativo para el lector:
SELECT
empId,
name,
NVL( 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 NVL( 4 * 10, 0 );
Obtenemos esto:
40
Entonces, no obtenemos el 4 * 10
parte. Obtenemos el resultado de esa expresión (que en este caso es 40
).
Lo mismo ocurre cuando el resultado de la expresión es NULL
:
SELECT NVL( 4 / 0, 0 );
Resultado:
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.
En tales casos, generalmente es mejor usar un valor más significativo que transmita al lector que no hay valor.
Ejemplo:
SELECT NVL( 4 / 0, 'No value' );
Resultado:
No value
El IFNULL()
Función
Como se mencionó, NVL()
es un alias para IFNULL()
. Por lo tanto, podemos reemplazar NVL()
con IFNULL()
en cualquiera de los ejemplos anteriores.
Ejemplo:
SELECT IFNULL( 4 / 0, 'No value' );
Resultado:
No value