sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB NULLIF() Förklarat

I MariaDB, NULLIF() funktion returnerar NULL om båda dess argument är likvärdiga. Annars returnerar det det första argumentet.

Syntax

Syntaxen ser ut så här:

NULLIF(expr1,expr2)

Exempel

Här är ett exempel att visa:

SELECT NULLIF( 5, 5 );

Resultat:

NULL

I det här fallet är båda argumenten identiska och resultatet är därför NULL .

När argumenten inte är likvärdiga

Så här händer när argumenten inte är likvärdiga:

SELECT NULLIF( 5, 3 );

Resultat:

5

I det här fallet returneras det första argumentet.

Strängar

Här är ett exempel som jämför strängar:

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

Resultat:

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

Datum

Här är ett exempel som jämför datum:

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

Uttryck

NULLIF() utvärderar det aktuella värdet av uttrycken. Därför, om vi skickar ett uttryck som detta:

SELECT NULLIF( 10, 2 * 5 );

Vi får detta:

NULL

2 multiplicerat med 5 är 10, så de två argumenten är ekvivalenta.

Så här händer om vi ändrar det andra argumentet:

SELECT NULLIF( 10, 3 * 5 );

Resultat:

10

Det första argumentet returneras.

Ett databasexempel

Anta att vi kör följande fråga:

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

Här har vi landsnamn i den vänstra kolumnen och det lokala namnet för respektive land i den högra.

Låt oss lägga till NULLIF() till en tredje kolumn i vår fråga:

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 att den tredje kolumnen endast returnerar det lokala namnet om det skiljer sig från värdet i Name kolumn. Om det är samma, då NULL returneras.

Vi kan alternativt använda NULLIF() för att filtrera våra sökresultat:

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 det här fallet returnerade vi bara de rader där det lokala namnet skiljer sig från Name kolumn.

NULLIF() kontra CASE

Följande kod:

NULLIF(expr1,expr2)

motsvarar följande CASE uttryck:

CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

Felaktig parameterräkning

Om du skickar fel antal argument, resulterar det i ett fel:

SELECT NULLIF( 10 );

Resultat:

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

  1. Installera Oracle 12c Standard Edition på Windows 10 Professional

  2. Varför kommer NULL-värden först när man beställer DESC i en PostgreSQL-fråga?

  3. SQL BESTÄLLNING EFTER:De 5 bör och inte göra för att sortera data som ett proffs

  4. SpringBoot+Kotlin+Postgres och JSONB:org.hibernate.MappingException:Ingen dialektmappning för JDBC-typ