Od MariaDB 10.3, NVL()
lze použít jako alias pro IFNULL()
funkce. Obě funkce nám tedy umožňují nahradit hodnoty NULL jinou hodnotou.
Syntaxe
NVL(expr1,expr2)
Pokud expr1
není NULL
, NVL()
vrátí expr1
; jinak vrátí expr2
.
Je dáno NVL()
je alias pro IFNULL()
, můžeme také použít následující syntaxi:
IFNULL(expr1,expr2)
Obě výše uvedené syntaxe vrátí stejný výsledek.
Příklad
Zde je základní příklad, který používá NULL
konstantní:
SELECT NVL( null, 'No Value' );
Výsledek:
No Value
V tomto případě jsem použil NVL()
k nahrazení hodnoty NULL No Value
.
Co se stane, když první argument není NULL
:
SELECT NVL( 'Spicy', 'No Value' );
Výsledek:
Green
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 NVL()
Chcete-li nahradit hodnoty NULL smysluplnější hodnotou pro čtenáře:
SELECT
empId,
name,
NVL( 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 NVL( 4 * 10, 0 );
Dostáváme toto:
40
Nedostaneme tedy 4 * 10
část. Dostaneme výsledek tohoto výrazu (což je v tomto případě 40
).
Totéž platí, když je výsledkem výrazu NULL
:
SELECT NVL( 4 / 0, 0 );
Výsledek:
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.
V takových případech je obvykle lepší použít smysluplnější hodnotu, která čtenáři sděluje, že neexistuje žádná hodnota.
Příklad:
SELECT NVL( 4 / 0, 'No value' );
Výsledek:
No Value
IFNULL()
Funkce
Jak již bylo zmíněno, NVL()
je alias pro IFNULL()
. Proto můžeme nahradit NVL()
pomocí IFNULL()
v kterémkoli z výše uvedených příkladů.
Příklad:
SELECT IFNULL( 4 / 0, 'No value' );
Výsledek:
No Value