In MySQL möchten Sie manchmal nicht, dass NULL-Werte als NULL
zurückgegeben werden . Manchmal möchten Sie, dass NULL-Werte mit einem anderen Wert zurückgegeben werden, z. B. „N/A“, „Nicht zutreffend“, „Keine“ oder sogar die leere Zeichenfolge „“.
Glücklicherweise gibt es in MySQL mehrere Möglichkeiten, dies zu tun.
Hier sind vier:
- Der
IFNULL()
Funktion - Das
COALESCE()
Funktion - Das
IF()
Funktion kombiniert mitIS NULL
(oderIS NOT NULL
)-Operator - Der
CASE
Ausdruck kombiniert mitIS NULL
(oderIS NOT NULL
)-Operator
Beispiele für diese Optionen finden Sie unten.
Beispieldaten
Lassen Sie uns zunächst einige Beispieldaten abrufen:
USE Solutions; SELECT TaskCode From Tasks;
Ergebnis:
+----------+ | TaskCode | +----------+ | gar123 | | NULL | | NULL | | dog456 | | NULL | | cat789 | +----------+
Wir haben also drei NULL-Werte und drei Nicht-NULL-Werte.
Die IFNULL()-Funktion
Angesichts seines Namens ist dies wahrscheinlich die naheliegendste Option zum Ersetzen von NULL-Werten in MySQL. Diese Funktion ist im Grunde das Äquivalent zu ISNULL()
im SQL-Server.
Der IFNULL()
Mit der Funktion können Sie zwei Argumente angeben. Das erste Argument wird nur zurückgegeben, wenn es nicht NULL ist. Wenn es NULL ist, wird stattdessen das zweite Argument zurückgegeben.
Hier ist ein Beispiel für die Verwendung von IFNULL()
gegen unseren Beispieldatensatz:
SELECT IFNULL(TaskCode, 'N/A') AS Result FROM Tasks;
Ergebnis:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Hier haben wir einfach NULL-Werte durch N/A
ersetzt .
Die COALESCE()-Funktion
Diese Funktion ähnelt der IFNULL()
Funktion, aber etwas anders. Diese Funktion entspricht dem ANSI SQL-Standard und wird in verschiedenen RDBMSs weit verbreitet .
Es funktioniert so, dass Sie so viele Argumente angeben, wie Sie benötigen. COALESCE()
gibt dann den ersten Nicht-NULL
zurück Wert in der Liste oder NULL
wenn es keine Nicht-NULL
gibt Werte.
So:
SELECT COALESCE(TaskCode, 'N/A') AS Result FROM Tasks;
Ergebnis:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Wir erhalten also genau das gleiche Ergebnis wie zuvor.
Der Unterschied zu dieser Funktion besteht jedoch darin, dass Sie, wie erwähnt, eine Liste mit Argumenten angeben können. Das COALESCE()
Die Funktion nimmt den ersten Nicht-NULL-Wert.
So könnten wir beispielsweise NULL
hinzufügen als erstes Argument und setzen Sie None
vor N/A
und schau was passiert:
SELECT COALESCE(NULL, TaskCode, 'None', 'N/A') AS Result FROM Tasks;
Ergebnis:
+--------+ | Result | +--------+ | gar123 | | None | | None | | dog456 | | None | | cat789 | +--------+
Das erste NULL
wurde übersprungen wie erwartet, dann wurden alle NULL-Werte im TaskCode
übersprungen Spalte, bevor Sie sich für None
entscheiden . Der N/A
value wurde in diesem Fall nicht verwendet, weil None
kam zuerst und ist ein Nicht-NULL-Wert.
Die IF()-Funktion kombiniert mit IS NULL/IST NOT NULL
Der IS NULL
und IS NOT NULL
Operatoren ermöglichen es Ihnen, auf NULL-Werte zu testen und je nach Ergebnis einen anderen Wert darzustellen.
Wir können diese Operatoren innerhalb von IF()
verwenden Funktion, sodass Nicht-NULL-Werte zurückgegeben und NULL-Werte durch einen Wert unserer Wahl ersetzt werden.
Beispiel:
SELECT IF(TaskCode IS NOT NULL, TaskCode, 'N/A') AS Result FROM Tasks;
Ergebnis:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Also das gleiche Ergebnis wie beim IFNULL()
und COALESCE()
Funktionen.
Und natürlich könnten wir IS NOT NULL
austauschen mit IS NULL
. Wenn wir das tun, müssten wir auch die nachfolgenden Argumente austauschen:
SELECT IF(TaskCode IS NULL, 'N/A', TaskCode) AS Result FROM Tasks;
Der CASE-Ausdruck kombiniert mit IS NULL/IS NOT NULL
Eine andere Möglichkeit ist die Verwendung von CASE
Ausdruck:
SELECT CASE WHEN TaskCode IS NOT NULL THEN TaskCode ELSE 'N/A' END AS Result FROM Tasks;
Ergebnis:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Wie beim vorherigen Beispiel könnte dies umgeschrieben werden, um IS NULL
zu verwenden statt IS NOT NULL
:
SELECT CASE WHEN TaskCode IS NULL THEN 'N/A' ELSE TaskCode END AS Result FROM Tasks;