In MySQL das 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, 'Fish', 'Rabbit');
Ergebnis:
Fish
In diesem Fall Fish
war der erste Nicht-NULL-Wert, also COALESCE()
diesen Wert zurückgegeben.
Rabbit
war auch kein NULL-Wert, kam aber nach Fish
und so wurde es nicht zurückgegeben.
Wenn alle Werte NULL sind
Wenn alle Werte NULL
sind , COALESCE()
gibt NULL
zurück :
SELECT COALESCE( null, null );
Ergebnis:
NULL
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, 2 * 10 );
Wir bekommen das:
20
Datenbankbeispiel
Angenommen, wir führen die folgende Abfrage aus:
SELECT
PetName,
PetType
FROM Pets;
Und wir erhalten das folgende Ergebnis:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk NULL Moo Cow Omph NULL
Wir können sehen, dass zwei 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(PetType, 'Unknown') AS "PetType"
FROM Pets;
Ergebnis:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk Unknown Moo Cow Omph Unknown
In diesem Fall haben wir alle NULL-Werte durch die Zeichenfolge Unknown
ersetzt .
Es muss aber kein String sein. Hier ist ein weiteres Beispiel, das NULL-Werte durch eine ganze Zahl ersetzt:
SELECT
EmployeeName,
Salary,
COALESCE(Salary, 0) AS "Salary (adjusted)"
FROM Employees;
Ergebnis:
EmployeeName Salary Salary (adjusted) -------------- ------ ----------------- Homer Einstein NULL 0 Bart Hawking 100000 100000
Ungültige Argumentanzahl
Verwenden von COALESCE()
ohne Argumente führt zu einem Fehler:
SELECT COALESCE();
Ergebnis:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1