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é, pakNULL
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()
vsCASE
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'