In MariaDB, il NULLIF()
la funzione restituisce NULL
se entrambi i suoi argomenti sono equivalenti. Altrimenti restituisce il primo argomento.
Sintassi
La sintassi è questa:
NULLIF(expr1,expr2)
Esempio
Ecco un esempio da dimostrare:
SELECT NULLIF( 5, 5 );
Risultato:
NULL
In questo caso, entrambi gli argomenti sono identici e quindi il risultato è NULL
.
Quando gli argomenti non sono equivalenti
Ecco cosa succede quando gli argomenti non sono equivalenti:
SELECT NULLIF( 5, 3 );
Risultato:
5
In questo caso, viene restituito il primo argomento.
Stringhe
Ecco un esempio che confronta le stringhe:
SELECT
NULLIF( 'Papaya', 'Papaya' ) AS "Same",
NULLIF( 'Papaya', 'Salad' ) AS "Different";
Risultato:
+------+-----------+ | Same | Different | +------+-----------+ | NULL | Papaya | +------+-----------+
Date
Ecco un esempio che confronta le date:
SELECT
NULLIF( DATE '2000-10-30', DATE '2000-10-30' ) AS "Same",
NULLIF( DATE '2000-10-30', DATE '1999-10-30' ) AS "Different";
Risultato:
+------+------------+ | Same | Different | +------+------------+ | NULL | 2000-10-30 | +------+------------+
Espressioni
NULLIF()
valuta il valore corrente delle espressioni. Pertanto, se passiamo un'espressione come questa:
SELECT NULLIF( 10, 2 * 5 );
Otteniamo questo:
NULL
2 moltiplicato per 5 fa 10, quindi i due argomenti sono equivalenti.
Ecco cosa succede se cambiamo il secondo argomento:
SELECT NULLIF( 10, 3 * 5 );
Risultato:
10
Viene restituito il primo argomento.
Un esempio di database
Supponiamo di eseguire la seguente query:
SELECT
Name,
LocalName
FROM country
ORDER BY Name ASC
LIMIT 10;
Risultato:
+---------------------+-----------------------+ | Name | LocalName | +---------------------+-----------------------+ | Afghanistan | Afganistan/Afqanestan | | Albania | Shqipëria | | Algeria | Al-Jaza’ir/Algérie | | American Samoa | Amerika Samoa | | Andorra | Andorra | | Angola | Angola | | Anguilla | Anguilla | | Antarctica | – | | Antigua and Barbuda | Antigua and Barbuda | | Argentina | Argentina | +---------------------+-----------------------+
Qui abbiamo i nomi dei paesi nella colonna di sinistra e il nome locale del rispettivo paese nella destra.
Aggiungiamo NULLIF()
a una terza colonna della nostra query:
SELECT
Name,
LocalName,
NULLIF(LocalName, Name) AS "Local Name Different"
FROM country
ORDER BY Name ASC
LIMIT 10;
Risultato:
+---------------------+-----------------------+-----------------------+ | Name | LocalName | Local Name Different | +---------------------+-----------------------+-----------------------+ | Afghanistan | Afganistan/Afqanestan | Afganistan/Afqanestan | | Albania | Shqipëria | Shqipëria | | Algeria | Al-Jaza’ir/Algérie | Al-Jaza’ir/Algérie | | American Samoa | Amerika Samoa | Amerika Samoa | | Andorra | Andorra | NULL | | Angola | Angola | NULL | | Anguilla | Anguilla | NULL | | Antarctica | – | – | | Antigua and Barbuda | Antigua and Barbuda | NULL | | Argentina | Argentina | NULL | +---------------------+-----------------------+-----------------------+
Possiamo vedere che la terza colonna restituisce il nome locale solo se è diverso dal valore nel Name
colonna. Se è lo stesso, allora NULL
viene restituito.
In alternativa possiamo usare NULLIF()
per filtrare i risultati delle nostre query:
SELECT
Name,
LocalName
FROM country
WHERE NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name ASC
LIMIT 10;
Risultato:
+----------------+-----------------------+ | Name | LocalName | +----------------+-----------------------+ | Afghanistan | Afganistan/Afqanestan | | Albania | Shqipëria | | Algeria | Al-Jaza’ir/Algérie | | American Samoa | Amerika Samoa | | Antarctica | – | | Armenia | Hajastan | | Austria | Österreich | | Azerbaijan | Azärbaycan | | Bahamas | The Bahamas | | Bahrain | Al-Bahrayn | +----------------+-----------------------+
In questo caso, abbiamo restituito solo quelle righe in cui il nome locale è diverso da Name
colonna.
NULLIF()
rispetto a CASE
Il seguente codice:
NULLIF(expr1,expr2)
è equivalente al seguente CASE
espressione:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
Conteggio parametri errato
Il passaggio di un numero errato di argomenti genera un errore:
SELECT NULLIF( 10 );
Risultato:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'NULLIF'