MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

MariaDB NULLIF() Explicado


No MariaDB, o NULLIF() função retorna NULL se ambos os argumentos forem equivalentes. Caso contrário, ele retorna o primeiro argumento.

Sintaxe


A sintaxe fica assim:
NULLIF(expr1,expr2) 

Exemplo


Segue um exemplo para demonstrar:
SELECT NULLIF( 5, 5 ); 

Resultado:
NULO

Nesse caso, ambos os argumentos são idênticos e, portanto, o resultado é NULL .

Quando os argumentos não são equivalentes


Aqui está o que acontece quando os argumentos não são equivalentes:
SELECT NULLIF( 5, 3 ); 

Resultado:
5

Nesse caso, o primeiro argumento é retornado.

Cordas


Aqui está um exemplo que compara strings:
SELECT 
    NULLIF( 'Papaya', 'Papaya' ) AS "Same",
    NULLIF( 'Papaya', 'Salad' ) AS "Different"; 

Resultado:
+------+-----------+| Igual | Diferente |+------+-----------+| NULO | Mamão |+------+-----------+

Datas


Aqui está um exemplo que compara datas:
SELECT 
    NULLIF( DATE '2000-10-30', DATE '2000-10-30' ) AS "Same",
    NULLIF( DATE '2000-10-30', DATE '1999-10-30' ) AS "Different"; 

Resultado:
+------+------------+| Igual | Diferente |+------+------------+| NULO | 2000-10-30 |+------+----------------+

Expressões


NULLIF() avalia o valor atual das expressões. Portanto, se passarmos uma expressão como esta:
SELECT NULLIF( 10, 2 * 5 ); 

Obtemos isso:
NULO

2 multiplicado por 5 é 10, então os dois argumentos são equivalentes.

Aqui está o que acontece se alterarmos o segundo argumento:
SELECT NULLIF( 10, 3 * 5 ); 

Resultado:
10

O primeiro argumento é retornado.

Um exemplo de banco de dados


Suponha que executemos a seguinte consulta:
SELECT 
    Name,
    LocalName
FROM country 
ORDER BY Name ASC
LIMIT 10; 

Resultado:
+----------+-----------------------+ | Nome | LocalName |+---------------------+-----------------------+| Afeganistão | Afeganistão/Afeganistão || Albânia | Shqipëria || Argélia | Al-Jaza'ir/Algérie || Samoa Americana | América Samoa || Andorra | Andorra || Angola | Angola || Anguila | Anguila || Antártica | – || Antígua e Barbuda | Antígua e Barbuda || Argentina | Argentina |+----------+-----------------------+ 
Aqui, temos os nomes dos países na coluna da esquerda e o nome local do respectivo país à direita.

Vamos adicionar NULLIF() para uma terceira coluna de nossa consulta:
SELECT 
    Name,
    LocalName,
    NULLIF(LocalName, Name) AS "Local Name Different"
FROM country 
ORDER BY Name ASC
LIMIT 10; 

Resultado:
+----------+-----------------------+ -----------------------+| Nome | LocalName | Nome local diferente |+---------------------+----------------------- +-----------------------+| Afeganistão | Afeganistão/Afeganistão | Afeganistão/Afeganistão || Albânia | Shqipëria | Shqipëria || Argélia | Al-Jaza'ir/Algérie | Al-Jaza'ir/Algérie || Samoa Americana | América Samoa | América Samoa || Andorra | Andorra | NULO || Angola | Angola | NULO || Anguila | Anguila | NULO || Antártica | – | – || Antígua e Barbuda | Antígua e Barbuda | NULO || Argentina | Argentina | NULL |+---------------------+-----------------------+- -----------+

Podemos ver que a terceira coluna retorna o nome local apenas se for diferente do valor no Name coluna. Se for o mesmo, então NULL é devolvido.

Alternativamente, podemos usar NULLIF() para filtrar nossos resultados de consulta:
SELECT 
    Name,
    LocalName
FROM country 
WHERE NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name ASC
LIMIT 10; 

Resultado:
+----------------+-----------------------+| Nome | LocalName |+----------------+-----------------------+| Afeganistão | Afeganistão/Afeganistão || Albânia | Shqipëria || Argélia | Al-Jaza'ir/Algérie || Samoa Americana | América Samoa || Antártica | – || Armênia | Hajastan || Áustria | Österreich || Azerbaijão | Azärbaycan || Bahamas | As Bahamas || Bahrein | Al-Bahrayn |+----------------+----------------------------------+

Nesse caso, retornamos apenas as linhas em que o nome local é diferente do Name coluna.

NULLIF() vs CASE


O seguinte código:
NULLIF(expr1,expr2) 

é equivalente ao seguinte CASE expressão:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END 

Contagem de parâmetros incorreta


Passar o número errado de argumentos resulta em um erro:
SELECT NULLIF( 10 ); 

Resultado:
ERRO 1582 (42000):contagem de parâmetro incorreta na chamada para a função nativa 'NULLIF'