sql >> Database teknologi >  >> RDS >> MariaDB

MariaDB NULLIF() Forklaret

I MariaDB er NULLIF() funktion returnerer NULL hvis begge dets argumenter er ækvivalente. Ellers returnerer det det første argument.

Syntaks

Syntaksen ser sådan ud:

NULLIF(expr1,expr2)

Eksempel

Her er et eksempel til demonstration:

SELECT NULLIF( 5, 5 );

Resultat:

NULL

I dette tilfælde er begge argumenter identiske, så resultatet er NULL .

Når argumenterne ikke er ækvivalente

Her er, hvad der sker, når argumenterne ikke er ækvivalente:

SELECT NULLIF( 5, 3 );

Resultat:

5

I dette tilfælde returneres det første argument.

Strenge

Her er et eksempel, der sammenligner strenge:

SELECT 
    NULLIF( 'Papaya', 'Papaya' ) AS "Same",
    NULLIF( 'Papaya', 'Salad' ) AS "Different";

Resultat:

+------+-----------+
| Same | Different |
+------+-----------+
| NULL | Papaya    |
+------+-----------+

Datoer

Her er et eksempel, der sammenligner datoer:

SELECT 
    NULLIF( DATE '2000-10-30', DATE '2000-10-30' ) AS "Same",
    NULLIF( DATE '2000-10-30', DATE '1999-10-30' ) AS "Different";

Resultat:

+------+------------+
| Same | Different  |
+------+------------+
| NULL | 2000-10-30 |
+------+------------+

Udtryk

NULLIF() evaluerer den aktuelle værdi af udtrykkene. Derfor, hvis vi sender et udtryk som dette:

SELECT NULLIF( 10, 2 * 5 );

Vi får dette:

NULL

2 ganget med 5 er 10, så de to argumenter er ækvivalente.

Her er, hvad der sker, hvis vi ændrer det andet argument:

SELECT NULLIF( 10, 3 * 5 );

Resultat:

10

Det første argument returneres.

Et databaseeksempel

Antag, at vi kører følgende forespørgsel:

SELECT 
    Name,
    LocalName
FROM country 
ORDER BY Name ASC
LIMIT 10;

Resultat:

+---------------------+-----------------------+
| Name                | LocalName             |
+---------------------+-----------------------+
| Afghanistan         | Afganistan/Afqanestan |
| Albania             | Shqipëria             |
| Algeria             | Al-Jaza’ir/Algérie    |
| American Samoa      | Amerika Samoa         |
| Andorra             | Andorra               |
| Angola              | Angola                |
| Anguilla            | Anguilla              |
| Antarctica          | –                     |
| Antigua and Barbuda | Antigua and Barbuda   |
| Argentina           | Argentina             |
+---------------------+-----------------------+

Her har vi landenavne i venstre kolonne, og det lokale navn for det respektive land i højre.

Lad os tilføje NULLIF() til en tredje kolonne i vores forespørgsel:

SELECT 
    Name,
    LocalName,
    NULLIF(LocalName, Name) AS "Local Name Different"
FROM country 
ORDER BY Name ASC
LIMIT 10;

Resultat:

+---------------------+-----------------------+-----------------------+
| Name                | LocalName             | Local Name Different  |
+---------------------+-----------------------+-----------------------+
| Afghanistan         | Afganistan/Afqanestan | Afganistan/Afqanestan |
| Albania             | Shqipëria             | Shqipëria             |
| Algeria             | Al-Jaza’ir/Algérie    | Al-Jaza’ir/Algérie    |
| American Samoa      | Amerika Samoa         | Amerika Samoa         |
| Andorra             | Andorra               | NULL                  |
| Angola              | Angola                | NULL                  |
| Anguilla            | Anguilla              | NULL                  |
| Antarctica          | –                     | –                     |
| Antigua and Barbuda | Antigua and Barbuda   | NULL                  |
| Argentina           | Argentina             | NULL                  |
+---------------------+-----------------------+-----------------------+

Vi kan se, at den tredje kolonne kun returnerer det lokale navn, hvis det er forskelligt fra værdien i Name kolonne. Hvis det er det samme, så NULL er returneret.

Vi kan alternativt bruge NULLIF() for at filtrere vores forespørgselsresultater:

SELECT 
    Name,
    LocalName
FROM country 
WHERE NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name ASC
LIMIT 10;

Resultat:

+----------------+-----------------------+
| Name           | LocalName             |
+----------------+-----------------------+
| Afghanistan    | Afganistan/Afqanestan |
| Albania        | Shqipëria             |
| Algeria        | Al-Jaza’ir/Algérie    |
| American Samoa | Amerika Samoa         |
| Antarctica     | –                     |
| Armenia        | Hajastan              |
| Austria        | Österreich            |
| Azerbaijan     | Azärbaycan            |
| Bahamas        | The Bahamas           |
| Bahrain        | Al-Bahrayn            |
+----------------+-----------------------+

I dette tilfælde returnerede vi kun de rækker, hvor det lokale navn er forskelligt fra Name kolonne.

NULLIF() vs CASE

Følgende kode:

NULLIF(expr1,expr2)

svarer til følgende CASE udtryk:

CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

Forkert parameterantal

Sender det forkerte antal argumenter, resulterer det i en fejl:

SELECT NULLIF( 10 );

Resultat:

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

  1. GROUP eller DISTINCT efter JOIN returnerer dubletter

  2. 2 måder at slette duplikerede rækker i MariaDB (ignorerer primærnøgle)

  3. ATN2() Eksempler i SQL Server

  4. Sådan udføres en procedure med proceduren DBMS_SCHEDULER.CREATE_JOB