sql >> Databáze >  >> RDS >> MariaDB

MariaDB NULLIF() Vysvětleno

V MariaDB, NULLIF() funkce vrací NULL pokud jsou oba jeho argumenty ekvivalentní. Jinak vrátí první argument.

Syntaxe

Syntaxe vypadá takto:

NULLIF(expr1,expr2) 

Příklad

Zde je příklad k demonstraci:

SELECT NULLIF( 5, 5 ); 

Výsledek:

NULL

V tomto případě jsou oba argumenty totožné, takže výsledek je NULL .

Když argumenty nejsou rovnocenné

Co se stane, když argumenty nejsou ekvivalentní:

SELECT NULLIF( 5, 3 ); 

Výsledek:

5

V tomto případě je vrácen první argument.

Řetězce

Zde je příklad, který porovnává řetězce:

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

Výsledek:

+------+-----------+| Totéž | Různé |+------+-----------+| NULL | Papája |+------+-----------+

Data

Zde je příklad, který porovnává data:

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

Výsledek:

+------+------------+| Totéž | Různé |+------+------------+| NULL | 2000-10-30 |+------+------------+

Výrazy

NULLIF() vyhodnotí aktuální hodnotu výrazů. Pokud tedy předáme výraz jako tento:

SELECT NULLIF( 10, 2 * 5 ); 

Dostáváme toto:

NULL

2 násobené 5 je 10, takže oba argumenty jsou ekvivalentní.

Zde je to, co se stane, pokud změníme druhý argument:

SELECT NULLIF( 10, 3 * 5 ); 

Výsledek:

10

Je vrácen první argument.

Příklad databáze

Předpokládejme, že spustíme následující dotaz:

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

Výsledek:

+---------------------+-----------------------+ | Jméno | LocalName |+---------------------+-----------------------+| Afghánistán | Afganistan/Afqanestan || Albánie | Shqipëria || Alžírsko | Al-Jaza’ir/Alžírsko || Americká Samoa | Amerika Samoa || Andorra | Andorra || Angola | Angola || Anguilla | Anguilla || Antarktida | – || Antigua a Barbuda | Antigua a Barbuda || Argentina | Argentina |+---------------------+-----------------------+ 

Zde máme v levém sloupci názvy zemí a v pravém místní název příslušné země.

Přidejme NULLIF() do třetího sloupce našeho dotazu:

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

Výsledek:

+---------------------+-----------------------+ ------------------------+| Jméno | Místní název | Místní název jiný |+---------------------+------------------------ +------------------------+| Afghánistán | Afganistan/Afqanestan | Afganistan/Afqanestan || Albánie | Shqipëria | Shqipëria || Alžírsko | Al-Jaza’ir/Alžírsko | Al-Jaza’ir/Alžírsko || Americká Samoa | Amerika Samoa | Amerika Samoa || Andorra | Andorra | NULL || Angola | Angola | NULL || Anguilla | Anguilla | NULL || Antarktida | – | – || Antigua a Barbuda | Antigua a Barbuda | NULL || Argentina | Argentina | NULL |+---------------------+-----------------------+- ----------------------+

Vidíme, že třetí sloupec vrací místní název pouze v případě, že se liší od hodnoty v Name sloupec. Pokud je to stejné, pak NULL je vráceno.

Alternativně můžeme použít NULLIF() pro filtrování výsledků dotazu:

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

Výsledek:

+----------------+-----------------------+| Jméno | LocalName |+----------------+-----------------------+| Afghánistán | Afganistan/Afqanestan || Albánie | Shqipëria || Alžírsko | Al-Jaza’ir/Alžírsko || Americká Samoa | Amerika Samoa || Antarktida | – || Arménie | Hajastan || Rakousko | Österreich || Ázerbájdžán | Azärbaycan || Bahamy | Bahamy || Bahrajn | Al-Bahrayn |+----------------+-----------------------+

V tomto případě jsme vrátili pouze ty řádky, kde se místní název liší od Name sloupec.

NULLIF() vs CASE

Následující kód:

NULLIF(expr1,expr2) 

je ekvivalentní následujícímu CASE výraz:

CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END 

Nesprávný počet parametrů

Předání nesprávného počtu argumentů má za následek chybu:

SELECT NULLIF( 10 ); 

Výsledek:

CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'NULLIF'

  1. Jak zkrátit TABLE v Oracle

  2. Jak změnit nastavení konfigurace pro databázovou poštu na serveru SQL Server (T-SQL)

  3. Bezpečnostní úvahy pro nasazení MariaDB v prostředí hybridního cloudu

  4. VÝBĚR s více podmínkami WHERE ve stejném sloupci