La mayoría de los principales DBMS nos brindan una función para reemplazar valores nulos con otro valor.
Pero el nombre de la función tiende a diferir entre los DBMS. Por ejemplo, SQL Server tiene un ISNULL()
función, mientras que otros (como MySQL, MariaDB y SQLite) tienen un IFNULL()
función para hacer lo mismo.
Sin embargo, para confundir las cosas, MySQL y MariaDB tienen cada uno un ISNULL()
función que funciona de manera diferente a la función de SQL Server del mismo nombre (la implementación de MySQL y MariaDB solo acepta un único argumento y devuelve 1
si es null
y 0
si no lo es).
De todos modos, en el caso de Oracle Database, podemos usar el NVL()
función para reemplazar valores nulos con otro valor.
En realidad, Oracle Database también tiene un NVL2()
función que nos permite proporcionar otro valor para usar en caso de que el primer argumento no sea null
.
Si simplemente queremos probar si un valor es null
o no, podemos usar el IS NULL
condición (o el IS NOT NULL
para la prueba opuesta).
El NVL()
Función
Aquí hay un ejemplo que demuestra cómo NVL()
la función funciona:
SELECT NVL(null, 'Run')
FROM DUAL;
Resultado:
Run
En ese caso, el primer argumento fue null
y así se devolvió el segundo argumento.
Esto es lo que sucede cuando el primer argumento no es null
:
SELECT NVL('Walk', 'Run')
FROM DUAL;
Resultado:
Walk
Se devuelve el primer argumento.
El NVL2()
Función
Como se mencionó, Oracle Database también nos proporciona el NVL2()
función. Esta función nos permite proporcionar otro valor para usar en caso de que el primer argumento no sea null
.
He aquí un ejemplo de cómo funciona:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Resultado:
3
El primer argumento fue null
y así se devolvió el tercer argumento.
Esto es lo que sucede cuando el primer argumento no es null
:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Resultado:
2
Se devuelve el segundo argumento.
El IS NULL
y IS NOT NULL
Condiciones
Si solo queremos saber si un valor es o no null
, podemos usar IS NULL
condición de comparación. Alternativamente, podemos usar IS NOT NULL
para comprobar si no es null
.
Supongamos que tenemos la siguiente tabla:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Resultado:
ID | OE# | PRECIO | MODELO |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
1 | 62150A3278 | 168 | HILUX |
En este caso, el PRICE
columna contiene un valor nulo para la primera fila, pero no para la segunda fila.
Aquí hay un ejemplo del uso de IS NULL
contra esa mesa:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Resultado:
ID | OE# | PRECIO | MODELO |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
Solo se devuelve la fila con el precio nulo.
Esto es lo que sucede cuando usamos IS NOT NULL
:
SELECT * FROM Autoparts
WHERE Price IS NOT NULL;
Resultado:
ID | OE# | PRECIO | MODELO |
---|---|---|---|
1 | 62150A3278 | 168 | HILUX |
Se devuelve la otra fila.