sql >> Databáze >  >> RDS >> Mysql

4 způsoby, jak nahradit NULL jinou hodnotou v MySQL

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() funkce
  • COALESCE() funkce
  • IF() v kombinaci s funkcí IS NULL (nebo IS NOT NULL ) operátor
  • CASE výraz kombinovaný s IS NULL (nebo IS 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 NULLIS 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;

  1. Pandy zapisují datový rámec do jiného schématu postgresql

  2. MySQL Přidat cizí klíč

  3. Jak provedu databázové transakce s psycopg2/python db api?

  4. Nastavte počáteční hodnotu pro sloupec s automatickým přírůstkem