SQLite tem uma função chamada
nullif()
e outra função chamada ifnull()
, cada um com um propósito diferente. nullif()
permite que você trate certos valores como NULL. Você pode pensar nisso como "retornar NULL se ...".ifnull()
permite substituir valores NULL por outro valor. Você pode pensar nisso como "se NULL, então ...".
Então eles basicamente fazem o oposto um do outro. Um substitui os valores NULL por outro valor e o outro substitui outro valor por NULL.
Exemplos
Em alguns casos, ambas as funções podem retornar o mesmo resultado. Por exemplo:
SELECT
nullif(1, 2),
ifnull(1, 2);
Resultado:
nullif(1, 2) ifnull(1, 2) ------------ ------------ 1 1
O
nullif()
A função retorna uma cópia de seu primeiro argumento se os argumentos forem diferentes e NULL se os argumentos forem iguais. Neste caso, os argumentos são diferentes e retorna o primeiro argumento. O
ifnull()
Por outro lado, a função retorna uma cópia do primeiro argumento não NULL. Nesse caso, ambos os argumentos não eram NULL e, portanto, o primeiro argumento foi retornado. Com o exemplo a seguir, começamos a ver a diferença entre essas duas funções:
SELECT
nullif(1, 1),
ifnull(1, 1);
Resultado:
nullif(1, 1) ifnull(1, 1) ------------ ------------ 1
O
nullif()
A função retorna NULL quando ambos os argumentos são iguais. Neste caso, ambos os argumentos eram os mesmos, então nullif()
fez seu trabalho e retornou NULL. O
ifnull()
A função retorna o primeiro argumento não NULL e, portanto, nesse caso, ela retornou o primeiro argumento. O fato de ambos os argumentos serem iguais não significa nada para
ifnull()
. Ele simplesmente retorna o primeiro argumento não NULL. Dito isto, se ambos os argumentos forem NULL, ele retornará NULL. Vamos tentar adicionar alguns NULLs.
SELECT
nullif(NULL, 1),
ifnull(NULL, 1);
Resultado:
nullif(NULL, 1) ifnull(NULL, 1) --------------- --------------- 1
Neste caso,
nullif()
retornou NULL porque NULL é o primeiro argumento (lembre-se que nullif()
retorna seu primeiro argumento se ambos os argumentos forem diferentes). ifnull()
por outro lado, retornou seu primeiro argumento não NULL. Aqui está o que parece se mudarmos os argumentos.
SELECT
nullif(1, NULL),
ifnull(1, NULL);
Resultado:
nullif(1, NULL) ifnull(1, NULL) --------------- --------------- 1 1
Ambos os argumentos são diferentes e, portanto,
nullif()
retorna o primeiro argumento. O primeiro argumento não é NULL e, portanto,
ifnull()
devolve.