Función NULLIF
Sintaxis
La expresión NULLIF compara dos argumentos y devuelve un valor nulo si los argumentos son iguales. Si no son iguales, se devuelve el primer argumento. Esta expresión realiza lo contrario a lo que realiza la expresión NVL o COALESCE.
NULLIF ( expression1, expression2 )
Argumentos
- expresión1, expresión2
-
Las columnas o expresiones de destino que se comparan. El tipo de retorno es el mismo que el tipo de la primera expresión. El nombre predeterminado de la columna del resultado NULLIF es el nombre de columna de la primera expresión.
Ejemplos
En el ejemplo siguiente, la consulta devuelve la cadena first
porque los argumentos no son iguales.
SELECT NULLIF('first', 'second');
case ------- first
En el ejemplo siguiente, la consulta devuelve NULL
porque los argumentos literales de la cadena son iguales.
SELECT NULLIF('first', 'first');
case ------- NULL
En el ejemplo siguiente, la consulta devuelve 1
porque los argumentos de enteros no son iguales.
SELECT NULLIF(1, 2);
case ------- 1
En el ejemplo siguiente, la consulta devuelve NULL
porque los argumentos de enteros son iguales.
SELECT NULLIF(1, 1);
case ------- NULL
En el siguiente ejemplo, la consulta devuelve valores nulos cuando los valores LISTID y SALESID coinciden:
select nullif(listid,salesid), salesid from sales where salesid<10 order by 1, 2 desc; listid | salesid --------+--------- 4 | 2 5 | 4 5 | 3 6 | 5 10 | 9 10 | 8 10 | 7 10 | 6 | 1 (9 rows)
Puede usar NULLIF para asegurarse de que las cadenas vacías se devuelvan siempre como valores nulos. En el siguiente ejemplo, la expresión NULLIF devuelve un valor nulo o una cadena que tiene al menos un carácter.
insert into category values(0,'','Special','Special'); select nullif(catgroup,'') from category where catdesc='Special'; catgroup ---------- null (1 row)
NULLIF ignora los espacios en blanco a la derecha. Si una cadena no está vacía porque contiene espacios en blanco, NULLIF seguirá devolviendo un valor nulo:
create table nulliftest(c1 char(2), c2 char(2)); insert into nulliftest values ('a','a '); insert into nulliftest values ('b','b'); select nullif(c1,c2) from nulliftest; c1 ------ null null (2 rows)