sql >> Database >  >> RDS >> Mysql

MySQL NULLIF() uitgelegd

In MySQL, NULLIF() is een flow control-functie die NULL . retourneert als beide argumenten equivalent zijn. Anders wordt het eerste argument geretourneerd.

Syntaxis

De syntaxis gaat als volgt:

NULLIF(expr1,expr2)

Voorbeeld

Hier is een voorbeeld om te demonstreren:

SELECT NULLIF( 7, 7 );

Resultaat:

NULL

In dit geval zijn beide argumenten identiek en is het resultaat NULL .

Als de argumenten niet gelijkwaardig zijn

Dit is wat er gebeurt als de argumenten niet equivalent zijn:

SELECT NULLIF( 7, 8 );

Resultaat:

7

De argumenten zijn verschillend en dus wordt het eerste argument geretourneerd.

Snaren

Hier is een voorbeeld dat strings vergelijkt:

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

Resultaat:

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

Datums

Hier is een voorbeeld dat datums vergelijkt:

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

Resultaat:

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

Uitdrukkingen

NULLIF() evalueert de huidige waarde van de uitdrukkingen. Daarom, als we een uitdrukking als deze doorgeven:

SELECT NULLIF( 8, 2 * 4 );

We krijgen dit:

NULL

2 vermenigvuldigd met 4 is 8, en dus zijn de twee argumenten equivalent.

Dit is wat er gebeurt als we het tweede argument veranderen:

SELECT NULLIF( 8, 2 * 3 );

Resultaat:

8

Het eerste argument wordt geretourneerd.

Een databasevoorbeeld

Stel dat we de volgende query uitvoeren:

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

Resultaat:

+-------------------------------+--------------------------------+
| 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 hebben we landnamen in de linkerkolom en de lokale naam voor het betreffende land in de rechterkolom.

Laten we NULLIF() . toevoegen naar een derde kolom van onze zoekopdracht:

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

Resultaat:

+-------------------------------+--------------------------------+--------------------------------+
| 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                    |
+-------------------------------+--------------------------------+--------------------------------+

We kunnen zien dat de derde kolom de lokale naam alleen retourneert als deze verschilt van de waarde in de Name kolom. Als het hetzelfde is, dan NULL wordt geretourneerd.

We kunnen ook NULLIF() . gebruiken om onze zoekopdrachtresultaten te filteren:

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

Resultaat:

+-------------------------------+--------------------------------+
| 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 dit geval hebben we alleen die rijen geretourneerd waar de lokale naam anders is dan de Name kolom.

NULLIF() vs CASE

De volgende code:

NULLIF(expr1,expr2)

is gelijk aan het volgende CASE uitdrukking:

CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

Onjuist aantal parameters

Het verkeerde aantal argumenten doorgeven, resulteert in een fout:

SELECT NULLIF( 5 );

Resultaat:

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

  1. Kunt u binnen één instructie toegang krijgen tot de waarde voor automatisch verhogen in MySQL?

  2. PL/SQL-programma om de records uit de tabel te verwijderen

  3. TreeView-knooppunten opnieuw rangschikken met slepen en neerzetten

  4. De uitvoering van een instructie in PostgreSQL pauzeren