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 adicionarNULLIF()
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 noName
coluna. Se for o mesmo, entãoNULL
é devolvido.
Alternativamente, podemos usarNULLIF()
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 doName
coluna.
NULLIF()
vsCASE
O seguinte código:
NULLIF(expr1,expr2)
é equivalente ao seguinteCASE
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'