SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Diferença entre NullIf() e IfNull() no SQLite


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.