V MySQL někdy nechcete, aby byly hodnoty NULL vráceny jako NULL . Někdy chcete, aby byly hodnoty NULL vráceny s jinou hodnotou, například „N/A“, „Nepoužije se“, „Žádné“ nebo dokonce prázdný řetězec „“.
Naštěstí existuje několik způsobů, jak to udělat v MySQL.
Zde jsou čtyři:
IFNULL()funkceCOALESCE()funkceIF()v kombinaci s funkcíIS NULL(neboIS NOT NULL) operátorCASEvýraz kombinovaný sIS NULL(neboIS NOT NULL) operátor
Příklady těchto možností jsou uvedeny níže.
Ukázková data
Nejprve si vezměme pár ukázkových dat:
USE Solutions; SELECT TaskCode From Tasks;
Výsledek:
+----------+ | TaskCode | +----------+ | gar123 | | NULL | | NULL | | dog456 | | NULL | | cat789 | +----------+
Máme tedy tři hodnoty NULL a tři hodnoty, které nejsou NULL.
Funkce IFNULL()
Vzhledem k jeho názvu je to pravděpodobně nejzřejmější možnost nahrazení hodnot NULL v MySQL. Tato funkce je v podstatě ekvivalentem ISNULL() na serveru SQL.
IFNULL() funkce umožňuje zadat dva argumenty. První argument je vrácen pouze v případě, že není NULL. Pokud je NULL, je místo toho vrácen druhý argument.
Zde je příklad použití IFNULL() oproti našemu vzorovému souboru dat:
SELECT IFNULL(TaskCode, 'N/A') AS Result FROM Tasks;
Výsledek:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Zde jsme jednoduše nahradili hodnoty NULL za N/A .
Funkce COALESCE()
Tato funkce je podobná funkci IFNULL() funkce, ale trochu jiná. Tato funkce se řídí standardem ANSI SQL a je široce nasazena v různých systémech RDBMS.
Funguje to tak, že poskytnete tolik argumentů, kolik potřebujete. COALESCE() pak vrátí první neNULL hodnotu v seznamu nebo NULL pokud nejsou žádné jiné než NULL hodnoty.
Takhle:
SELECT COALESCE(TaskCode, 'N/A') AS Result FROM Tasks;
Výsledek:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Dostaneme tedy přesně stejný výsledek jako dříve.
Rozdíl oproti této funkci je však v tom, že, jak již bylo zmíněno, můžete poskytnout seznam argumentů. COALESCE() funkce bude mít podle toho, která je první neNULL hodnota.
Můžeme tedy například přidat NULL jako první argument a umístěte None před N/A a podívejte se, co se stane:
SELECT COALESCE(NULL, TaskCode, 'None', 'N/A') AS Result FROM Tasks;
Výsledek:
+--------+ | Result | +--------+ | gar123 | | None | | None | | dog456 | | None | | cat789 | +--------+
Přeskočilo první NULL podle očekávání pak přeskočil všechny hodnoty NULL v TaskCode před nastavením na None . N/A hodnota nebyla v tomto případě použita, protože None je na prvním místě a nemá hodnotu NULL.
Funkce IF() v kombinaci s IS NULL/IS NOT NULL
IS NULL a IS NOT NULL operátory vám umožňují testovat hodnoty NULL a prezentovat jinou hodnotu v závislosti na výsledku.
Tyto operátory můžeme použít uvnitř IF() funkce, takže jsou vráceny hodnoty jiné než NULL a hodnoty NULL jsou nahrazeny hodnotou dle našeho výběru.
Příklad:
SELECT IF(TaskCode IS NOT NULL, TaskCode, 'N/A') AS Result FROM Tasks;
Výsledek:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Tedy stejný výsledek jako u IFNULL() a COALESCE() funkce.
A samozřejmě bychom mohli vyměnit IS NOT NULL s IS NULL . Pokud to uděláme, budeme muset zaměnit i následující argumenty:
SELECT IF(TaskCode IS NULL, 'N/A', TaskCode) AS Result FROM Tasks;
Výraz CASE v kombinaci s IS NULL/IS NOT NULL
Dalším způsobem, jak to udělat, je použít CASE výraz:
SELECT
CASE
WHEN TaskCode IS NOT NULL THEN TaskCode
ELSE 'N/A'
END AS Result
FROM Tasks;
Výsledek:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Stejně jako v předchozím příkladu může být tento přepsán tak, aby používal IS NULL místo IS NOT NULL :
SELECT
CASE
WHEN TaskCode IS NULL THEN 'N/A'
ELSE TaskCode
END AS Result
FROM Tasks;