MySQL hat ein IFNULL()
Funktion, mit der wir NULL-Werte einfach durch andere Werte ersetzen können.
Syntax
IFNULL(expr1,expr2)
Wenn expr1
ist nicht NULL
, IFNULL()
gibt expr1
zurück ; andernfalls wird expr2
zurückgegeben .
Beispiel
Hier ist ein einfaches Beispiel, das den NULL
verwendet Konstante:
SELECT IFNULL( null, 'n/a' );
Ergebnis:
n/a
In diesem Fall habe ich IFNULL()
verwendet um den NULL-Wert durch die Zeichenfolge n/a
zu ersetzen .
Folgendes passiert, wenn das erste Argument nicht NULL
ist :
SELECT IFNULL( 'Cow', 'n/a' );
Ergebnis:
Cow
In diesem Fall wird das erste Argument zurückgegeben, da es nicht NULL
ist .
Datenbankbeispiel
Angenommen, wir führen die folgende Abfrage aus:
SELECT
PetName,
DOB
FROM Pets;
Ergebnis:
+---------+------------+ | 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 | +---------+------------+
Wir können sehen, dass zwei Zeilen NULL-Werte in der DOB-Spalte haben.
In der folgenden Abfrage verwenden wir IFNULL()
um die NULL-Werte durch einen aussagekräftigeren Wert für den Leser zu ersetzen:
SELECT
PetName,
IFNULL( DOB, 'None supplied' )
FROM Pets;
Ergebnis:
+---------+--------------------------------+ | 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 | +---------+--------------------------------+
Ausdrücke
Der aktuelle Wert des ersten Arguments wird ausgewertet. Wenn wir also einen Ausdruck wie den folgenden angeben:
SELECT IFNULL( 2 * 5, 0 );
Wir bekommen das:
10
Wir bekommen also nicht 2 * 5
Teil. Wir erhalten das Ergebnis dieses Ausdrucks (in diesem Fall 10
).
Dasselbe gilt, wenn das Ergebnis des Ausdrucks NULL
ist :
SELECT IFNULL( 2 / 0, 0 );
Wir bekommen das:
0.0000
Es lohnt sich jedoch, vorsichtig zu sein. Null ist ein Wert. NULL
ist nicht.
Im obigen Beispiel habe ich Null zurückgegeben, wenn es einen NULL-Wert gab, aber das könnte irreführend oder sogar völlig falsch sein. Stellen Sie sich vor, wir würden Preise teilen und das Ergebnis wäre ein Preis von Null. OK, wenn wir einen Preis durch Null teilen, stimmt wahrscheinlich etwas anderes nicht, aber ich bin sicher, Sie verstehen, was ich meine.
In jedem Fall ist es normalerweise besser, einen aussagekräftigeren Wert zu verwenden, der dem Leser vermittelt, dass es keinen Wert gibt.
Beispiel:
SELECT IFNULL( 2 / 0, 'No value' );
Ergebnis:
No value