In MariaDB die COALESCE()
Der Operator gibt den ersten Nicht-NULL-Wert in der Liste zurück, oder NULL, wenn es keine Nicht-NULL-Werte gibt.
Syntax
Die Syntax lautet wie folgt:
COALESCE(value,...)
Beispiel
Hier ist ein einfaches Beispiel zur Veranschaulichung:
SELECT COALESCE(null, 'Red', 'Black');
Ergebnis:
Red
In diesem Fall Red
war der erste Nicht-NULL-Wert, also COALESCE()
diesen Wert zurückgegeben.
Black
war auch nicht NULL, kam aber nach Red
und so wurde es nicht zurückgegeben.
Datenbankbeispiel
Angenommen, wir führen die folgende Abfrage aus:
SELECT
PetName,
DOB AS "Date of Birth"
FROM Pets;
Und wir erhalten das folgende Ergebnis:
+---------+---------------+ | PetName | Date of Birth | +---------+---------------+ | 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 | +---------+---------------+
Wir können sehen, dass die letzten beiden Zeilen NULL-Werte in der DOB-Spalte haben.
Wenn wir NULL
ersetzen wollten mit einem anderen Wert könnten wir die Abfrage wie folgt ändern:
SELECT
PetName,
COALESCE(DOB, 'None Supplied') AS "Date of Birth"
FROM Pets;
Ergebnis:
+---------+---------------+ | PetName | Date of Birth | +---------+---------------+ | 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 | +---------+---------------+
Ausdrücke
COALESCE()
gibt den aktuellen Wert des ersten Ausdrucks zurück, der anfänglich nicht zu NULL
ausgewertet wird . Wenn wir also einen Ausdruck wie diesen übergeben:
SELECT COALESCE( null, 5 * 2 );
Wir bekommen das:
10
Wenn alle Werte NULL sind
Wenn alle Werte NULL
sind , COALESCE()
gibt NULL
zurück :
SELECT COALESCE( null, null );
Ergebnis:
NULL
COALESCE()
vs IFNULL()
Bei Verwendung mit zwei Werten COALESCE()
funktioniert genauso wie IFNULL
:
SET @a = null, @b = 52;
SELECT
COALESCE(@a, @b),
IFNULL(@a, @b);
Ergebnis:
+------------------+----------------+ | COALESCE(@a, @b) | IFNULL(@a, @b) | +------------------+----------------+ | 52 | 52 | +------------------+----------------+
Ungültige Argumentanzahl
Verwenden von COALESCE()
ohne Argumente führt zu einem Fehler:
SELECT COALESCE();
Ergebnis:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1