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

MySQL NULLIF() erklärt

In MySQL NULLIF() ist eine Flusssteuerungsfunktion, die NULL zurückgibt wenn beide Argumente äquivalent sind. Andernfalls wird das erste Argument zurückgegeben.

Syntax

Die Syntax sieht so aus:

NULLIF(expr1,expr2)

Beispiel

Hier ist ein Beispiel zur Veranschaulichung:

SELECT NULLIF( 7, 7 );

Ergebnis:

NULL

In diesem Fall sind beide Argumente identisch und daher ist das Ergebnis NULL .

Wenn die Argumente nicht gleichwertig sind

Folgendes passiert, wenn die Argumente nicht äquivalent sind:

SELECT NULLIF( 7, 8 );

Ergebnis:

7

Die Argumente sind unterschiedlich und daher wird das erste Argument zurückgegeben.

Strings

Hier ist ein Beispiel, das Strings vergleicht:

SELECT 
    NULLIF( 'Bean', 'Bean' ) AS "Same",
    NULLIF( 'Bean', 'Mushroom' ) AS "Different";

Ergebnis:

Same	Different
----    ---------
NULL	Bean

Termine

Hier ist ein Beispiel, das Datumsangaben vergleicht:

SELECT 
    NULLIF( DATE '2030-12-20', DATE '2030-12-20' ) AS "Same",
    NULLIF( DATE '2030-12-20', DATE '2035-08-15' ) AS "Different";

Ergebnis:

Same	Different
----    ----------
NULL	2030-12-20

Ausdrücke

NULLIF() wertet den aktuellen Wert der Ausdrücke aus. Wenn wir also einen Ausdruck wie diesen übergeben:

SELECT NULLIF( 8, 2 * 4 );

Wir bekommen das:

NULL

2 multipliziert mit 4 ergibt 8, also sind die beiden Argumente äquivalent.

Folgendes passiert, wenn wir das zweite Argument ändern:

SELECT NULLIF( 8, 2 * 3 );

Ergebnis:

8

Das erste Argument wird zurückgegeben.

Ein Datenbankbeispiel

Angenommen, wir führen die folgende Abfrage aus:

SELECT 
    Name,
    LocalName
FROM country 
WHERE Region = 'Southern Europe'
ORDER BY Name;

Ergebnis:

+-------------------------------+--------------------------------+
| Name                          | LocalName                      |
+-------------------------------+--------------------------------+
| Albania                       | Shqipëria                      |
| Andorra                       | Andorra                        |
| Bosnia and Herzegovina        | Bosna i Hercegovina            |
| Croatia                       | Hrvatska                       |
| Gibraltar                     | Gibraltar                      |
| Greece                        | Elláda                         |
| Holy See (Vatican City State) | Santa Sede/Città del Vaticano  |
| Italy                         | Italia                         |
| Macedonia                     | Makedonija                     |
| Malta                         | Malta                          |
| Portugal                      | Portugal                       |
| San Marino                    | San Marino                     |
| Slovenia                      | Slovenija                      |
| Spain                         | España                         |
| Yugoslavia                    | Jugoslavija                    |
+-------------------------------+--------------------------------+

Hier haben wir in der linken Spalte die Ländernamen und in der rechten den lokalen Namen für das jeweilige Land.

Lassen Sie uns NULLIF() hinzufügen zu einer dritten Spalte unserer Abfrage:

SELECT
    Name,
    LocalName,
    NULLIF(LocalName, Name) AS "Local Name if Different"
FROM country 
WHERE Region = 'Southern Europe'
ORDER BY Name;

Ergebnis:

+-------------------------------+--------------------------------+--------------------------------+
| Name                          | LocalName                      | Local Name if Different        |
+-------------------------------+--------------------------------+--------------------------------+
| Albania                       | Shqipëria                      | Shqipëria                      |
| Andorra                       | Andorra                        | NULL                           |
| Bosnia and Herzegovina        | Bosna i Hercegovina            | Bosna i Hercegovina            |
| Croatia                       | Hrvatska                       | Hrvatska                       |
| Gibraltar                     | Gibraltar                      | NULL                           |
| Greece                        | Elláda                         | Elláda                         |
| Holy See (Vatican City State) | Santa Sede/Città del Vaticano  | Santa Sede/Città del Vaticano  |
| Italy                         | Italia                         | Italia                         |
| Macedonia                     | Makedonija                     | Makedonija                     |
| Malta                         | Malta                          | NULL                           |
| Portugal                      | Portugal                       | NULL                           |
| San Marino                    | San Marino                     | NULL                           |
| Slovenia                      | Slovenija                      | Slovenija                      |
| Spain                         | España                         | España                         |
| Yugoslavia                    | Jugoslavija                    | Jugoslavija                    |
+-------------------------------+--------------------------------+--------------------------------+

Wir können sehen, dass die dritte Spalte den lokalen Namen nur zurückgibt, wenn er sich von dem Wert in Name unterscheidet Säule. Wenn es gleich ist, dann NULL zurückgegeben wird.

Wir können auch NULLIF() verwenden So filtern Sie unsere Abfrageergebnisse:

SELECT 
    Name,
    LocalName
FROM country 
WHERE Region = 'Southern Europe'
AND NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name;

Ergebnis:

+-------------------------------+--------------------------------+
| Name                          | LocalName                      |
+-------------------------------+--------------------------------+
| Albania                       | Shqipëria                      |
| Bosnia and Herzegovina        | Bosna i Hercegovina            |
| Croatia                       | Hrvatska                       |
| Greece                        | Elláda                         |
| Holy See (Vatican City State) | Santa Sede/Città del Vaticano  |
| Italy                         | Italia                         |
| Macedonia                     | Makedonija                     |
| Slovenia                      | Slovenija                      |
| Spain                         | España                         |
| Yugoslavia                    | Jugoslavija                    |
+-------------------------------+--------------------------------+

In diesem Fall haben wir nur die Zeilen zurückgegeben, in denen sich der lokale Name von Name unterscheidet Spalte.

NULLIF() vs. CASE

Der folgende Code:

NULLIF(expr1,expr2)

entspricht dem folgenden CASE Ausdruck:

CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

Falsche Parameteranzahl

Das Übergeben der falschen Anzahl von Argumenten führt zu einem Fehler:

SELECT NULLIF( 5 );

Ergebnis:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'NULLIF'