V MariaDB, IFNULL()
Funkce nám umožňuje nahradit hodnoty NULL jinou hodnotou.
Syntaxe
IFNULL(expr1,expr2)
Pokud expr1
není NULL
, IFNULL()
vrátí expr1
; jinak vrátí expr2
.
Také z MariaDB 10.3, NVL()
lze použít jako alias pro IFNULL()
funkce. Proto máme možnost místo toho použít následující syntaxi:
NVL(expr1,expr2)
Výsledek je stejný bez ohledu na použitou syntaxi.
Příklad
Zde je základní příklad, který používá NULL
konstantní:
SELECT IFNULL( null, 'No Value' );
Výsledek:
No Value
V tomto případě jsem použil IFNULL()
k nahrazení hodnoty NULL No Value
.
Co se stane, když první argument není NULL
:
SELECT IFNULL( 'Spicy', 'No Value' );
Výsledek:
Spicy
V tomto případě je vrácen první argument, protože není NULL
.
Příklad databáze
Předpokládejme, že spustíme následující dotaz:
SELECT * FROM Employees;
Výsledek:
empId name dept ----- ----- ----- 1 Jess Sales 2 Rohit NULL 3 Zohan Sales 4 Homer NULL
Vidíme, že dva řádky mají v dept
hodnoty NULL sloupec.
V následujícím dotazu používáme IFNULL()
Chcete-li nahradit hodnoty NULL smysluplnější hodnotou pro čtenáře:
SELECT
empId,
name,
IFNULL( dept, 'Not yet assigned' ) AS dept
FROM Employees;
Výsledek:
empId name dept ----- ----- ---------------- 1 Jess Sales 2 Rohit Not yet assigned 3 Zohan Sales 4 Homer Not yet assigned
Výrazy
Vyhodnocuje se aktuální hodnota prvního argumentu. Pokud tedy poskytneme výraz, jako je tento:
SELECT IFNULL( 3 * 7, 0 );
Dostáváme toto:
21
Nedostáváme tedy 3 * 7
část. Dostaneme výsledek tohoto výrazu (což je v tomto případě 21
).
Totéž platí, když je výsledkem výrazu NULL
. Pokud například spustíme následující kód:
SELECT IFNULL( 3 / 0, 0 );
Dostáváme toto:
0.0000
Toto je však nebezpečný příklad. Nula je hodnota. NULL
není.
Vrácení nuly, když existuje hodnota NULL, může být zavádějící nebo dokonce úplně špatné. Představte si, že bychom řešili ceny. Mohli bychom skončit s cenou nula, což by mohlo být nesprávné a stát by to firmu hodně peněz.
Proto je v takových případech obvykle lepší použít smysluplnější hodnotu, která čtenáři sděluje, že žádná hodnota neexistuje.
Příklad:
SELECT IFNULL( 3 / 0, 'No value' );
Výsledek:
No Value
NVL()
Funkce
Počínaje MariaDB 10.3, NVL()
je alias pro IFNULL()
. Proto můžeme nahradit IFNULL()
pomocí NVL()
v kterémkoli z výše uvedených příkladů.
Příklad:
SELECT NVL( 3 / 0, 'No value' );
Výsledek:
No Value