MySQL ha un IFNULL()
funzione che ci consente di sostituire facilmente i valori NULL con un altro valore.
Sintassi
IFNULL(expr1,expr2)
Se expr1
non è NULL
, IFNULL()
restituisce expr1
; altrimenti restituisce expr2
.
Esempio
Ecco un esempio di base che utilizza NULL
costante:
SELECT IFNULL( null, 'n/a' );
Risultato:
n/a
In questo caso, ho usato IFNULL()
per sostituire il valore NULL con la stringa n/a
.
Ecco cosa succede quando il primo argomento non è NULL
:
SELECT IFNULL( 'Cow', 'n/a' );
Risultato:
Cow
In questo caso, viene restituito il primo argomento, perché non è NULL
.
Esempio di database
Supponiamo di eseguire la seguente query:
SELECT
PetName,
DOB
FROM Pets;
Risultato:
+---------+------------+ | PetName | DOB | +---------+------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | NULL | | Meow | NULL | | Woof | 2020-10-03 | | Ears | 2022-01-11 | +---------+------------+
Possiamo vedere che due righe hanno valori NULL nella colonna DOB.
Nella query seguente, utilizziamo IFNULL()
per sostituire i valori NULL con un valore più significativo per il lettore:
SELECT
PetName,
IFNULL( DOB, 'None supplied' )
FROM Pets;
Risultato:
+---------+--------------------------------+ | PetName | IFNULL( DOB, 'None supplied' ) | +---------+--------------------------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | None supplied | | Meow | None supplied | | Woof | 2020-10-03 | | Ears | 2022-01-11 | +---------+--------------------------------+
Espressioni
Viene valutato il valore corrente del primo argomento. Pertanto, se forniamo un'espressione come la seguente:
SELECT IFNULL( 2 * 5, 0 );
Otteniamo questo:
10
Quindi, non otteniamo il 2 * 5
parte. Otteniamo il risultato di quell'espressione (che in questo caso è 10
).
Lo stesso vale quando il risultato dell'espressione è NULL
:
SELECT IFNULL( 2 / 0, 0 );
Otteniamo questo:
0.0000
Vale la pena stare attenti però. Zero è un valore. NULL
non è.
Nell'esempio sopra ho restituito zero quando c'era un valore NULL, ma questo potrebbe essere fuorviante o addirittura completamente sbagliato. Immagina se stessimo dividendo i prezzi e il risultato fosse un prezzo pari a zero. OK, se dividiamo un prezzo per zero probabilmente c'è qualcos'altro che non va, ma sono sicuro che avrai capito.
In ogni caso, di solito è meglio utilizzare un valore più significativo che comunichi al lettore che non esiste alcun valore.
Esempio:
SELECT IFNULL( 2 / 0, 'No value' );
Risultato:
No value