Mysql
 sql >> Datenbank >  >> RDS >> Mysql

4 Möglichkeiten zum Ersetzen von NULL durch einen anderen Wert in MySQL

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 mit IS NULL (oder IS NOT NULL )-Operator
  • Der CASE Ausdruck kombiniert mit IS NULL (oder IS 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;