MySQL heeft een IFNULL()
functie waarmee we eenvoudig NULL-waarden kunnen vervangen door een andere waarde.
Syntaxis
IFNULL(expr1,expr2)
Als expr1
is niet NULL
, IFNULL()
retourneert expr1
; anders retourneert het expr2
.
Voorbeeld
Hier is een eenvoudig voorbeeld dat de NULL
. gebruikt constante:
SELECT IFNULL( null, 'n/a' );
Resultaat:
n/a
In dit geval gebruikte ik IFNULL()
om de NULL-waarde te vervangen door de tekenreeks n/a
.
Dit is wat er gebeurt als het eerste argument niet NULL
is :
SELECT IFNULL( 'Cow', 'n/a' );
Resultaat:
Cow
In dit geval wordt het eerste argument geretourneerd, omdat het niet NULL
. is .
Databasevoorbeeld
Stel dat we de volgende query uitvoeren:
SELECT
PetName,
DOB
FROM Pets;
Resultaat:
+---------+------------+ | 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 | +---------+------------+
We kunnen zien dat twee rijen NULL-waarden hebben in de DOB-kolom.
In de volgende query gebruiken we IFNULL()
om de NULL-waarden te vervangen door een meer betekenisvolle waarde voor de lezer:
SELECT
PetName,
IFNULL( DOB, 'None supplied' )
FROM Pets;
Resultaat:
+---------+--------------------------------+ | 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 | +---------+--------------------------------+
Uitdrukkingen
De huidige waarde van het eerste argument wordt geëvalueerd. Daarom, als we een uitdrukking als de volgende leveren:
SELECT IFNULL( 2 * 5, 0 );
We krijgen dit:
10
We krijgen dus niet de 2 * 5
deel. We krijgen het resultaat van die uitdrukking (in dit geval 10
).
Hetzelfde geldt wanneer het resultaat van de expressie NULL
. is :
SELECT IFNULL( 2 / 0, 0 );
We krijgen dit:
0.0000
Het loont echter om voorzichtig te zijn. Nul is een waarde. NULL
is niet.
In het bovenstaande voorbeeld heb ik nul geretourneerd wanneer er een NULL-waarde was, maar dit kan misleidend of zelfs helemaal verkeerd zijn. Stel je voor dat we prijzen zouden delen, en het resultaat was een prijs van nul. Oké, als we een prijs door nul delen, is er waarschijnlijk iets anders mis, maar ik weet zeker dat je mijn punt begrijpt.
In ieder geval is het meestal beter om een betekenisvollere waarde te gebruiken die de lezer duidelijk maakt dat er geen waarde is.
Voorbeeld:
SELECT IFNULL( 2 / 0, 'No value' );
Resultaat:
No value