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

Como o SQLite Nullif() funciona


O SQLite nullif() function é uma função útil que permite tratar determinados valores como NULL quando necessário.

Não deve ser confundido com o ifnull() função, que faz o oposto – permite que você trate valores NULL como outra coisa.

O nullif() A função aceita dois argumentos e retorna seu primeiro argumento se os argumentos forem diferentes e NULL se os argumentos forem iguais.

Sintaxe


A sintaxe fica assim:
nullif(X,Y)

A função pesquisa seus argumentos da esquerda para a direita para um argumento que define uma função de agrupamento e usa essa função de agrupamento para todas as comparações de string. Se nenhum argumento define uma função de agrupamento, então o BINARY é usado.

Exemplo


Aqui está um exemplo básico para demonstrar.
SELECT 
  nullif(123,0),
  nullif(0,0),
  nullif(123,123);

Resultado:
nullif(123,0)  nullif(0,0)  nullif(123,123)
-------------  -----------  ---------------
123                                        

Na primeira coluna os dois valores são diferentes, então o primeiro valor é retornado.

Na segunda coluna ambos os valores são iguais, então NULL é retornado.

O mesmo vale para a terceira coluna – ambos os valores são iguais, então NULL é retornado.

Um exemplo prático


Aqui está um exemplo de banco de dados que demonstra um uso mais prático para o nullif() função.

Veja a tabela a seguir chamada Produtos :
ProductId   ProductName    Price     
----------  -------------  ----------
1           Widget Holder  139.5     
2           Widget Stick   89.75     
3           Foo Cap        11.99     
4           Free Widget    0.0       
5           Free Foobar    0.0       
6           Free Beer                

Podemos ver que dois produtos têm preço zero. Outro produto tem um preço NULL.

Agora, imagine que queremos descobrir quantos produtos têm um preço positivo. Em outras palavras, não queremos incluir produtos que tenham preço ou zero (ou NULL).

Para fazer isso, podemos usar nullif() em conjunto com o count() função.
SELECT count(nullif(Price, 0.00)) 
FROM Products;

Resultado:
3

Obtemos 3 conforme o esperado, que é exatamente quantas linhas têm um valor positivo no Preço coluna.

Isso funciona porque o count() função conta apenas valores não NULL. Ao converter os valores zero em NULL, podemos ignorar esses valores em nosso cálculo.

Aqui está novamente sem o nullif() função.
SELECT count(Price) 
FROM Products;

Resultado:
5

Portanto, neste caso, inclui os valores zero e obtemos 5. Ele ainda ignora a linha 6 porque na verdade ela tem um valor NULL.