MySQL má IFNULL()
funkce, která nám umožňuje snadno nahradit hodnoty NULL jinou hodnotou.
Syntaxe
IFNULL(expr1,expr2)
Pokud expr1
není NULL
, IFNULL()
vrátí expr1
; jinak vrátí expr2
.
Příklad
Zde je základní příklad, který používá NULL
konstantní:
SELECT IFNULL( null, 'n/a' );
Výsledek:
n/a
V tomto případě jsem použil IFNULL()
k nahrazení hodnoty NULL řetězcem n/a
.
Co se stane, když první argument není NULL
:
SELECT IFNULL( 'Cow', 'n/a' );
Výsledek:
Cow
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
PetName,
DOB
FROM Pets;
Výsledek:
+---------+------------+ | PetName | DOB | +---------+------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | NULL | | Meow | NULL | | Woof | 2020-10-03 | | Ears | 2022-01-11 | +---------+------------+
Vidíme, že dva řádky mají ve sloupci DOB hodnoty NULL.
V následujícím dotazu používáme IFNULL()
Chcete-li nahradit hodnoty NULL smysluplnější hodnotou pro čtenáře:
SELECT
PetName,
IFNULL( DOB, 'None supplied' )
FROM Pets;
Výsledek:
+---------+--------------------------------+ | PetName | IFNULL( DOB, 'None supplied' ) | +---------+--------------------------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | None supplied | | Meow | None supplied | | Woof | 2020-10-03 | | Ears | 2022-01-11 | +---------+--------------------------------+
Výrazy
Vyhodnocuje se aktuální hodnota prvního argumentu. Pokud tedy poskytneme výraz, jako je tento:
SELECT IFNULL( 2 * 5, 0 );
Dostáváme toto:
10
Nedostáváme tedy 2 * 5
část. Dostaneme výsledek tohoto výrazu (což je v tomto případě 10
).
Totéž platí, když je výsledkem výrazu NULL
:
SELECT IFNULL( 2 / 0, 0 );
Dostáváme toto:
0.0000
Vyplatí se však být opatrný. Nula je hodnota. NULL
není.
Ve výše uvedeném příkladu jsem vrátil nulu, když tam byla hodnota NULL, ale to by mohlo být zavádějící nebo dokonce úplně špatné. Představte si, že bychom rozdělili ceny a výsledkem by byla cena nula. Dobře, pokud dělíme cenu nulou, pravděpodobně je něco jiného špatně, ale jsem si jistý, že mi rozumíte.
V každém případě je obvykle lepší použít smysluplnější hodnotu, která čtenáři sděluje, že žádná hodnota neexistuje.
Příklad:
SELECT IFNULL( 2 / 0, 'No value' );
Výsledek:
No value