Pokud v SQLite potřebujete nahradit NULL výsledky textem jako „N/A“, „None“ nebo dokonce textem „NULL“, můžete použít jedno ze tří níže uvedených řešení.
Ukázková data
Nejprve je zde příklad dotazu, který vrací některé hodnoty NULL.
SELECT
CustomerId,
Fax
FROM Customer
LIMIT 5;
Výsledek:
CustomerId Fax ---------- ------------- 1 +55 (12) 3923 2 3 4 5 +420 2 4172 5
Všimněte si, že řádky 2, 3 a 4 obsahují hodnoty NULL v Faxu sloupec.
Můžeme použít níže uvedené metody ke změně výsledku tak, aby sloupce NULL zobrazovaly „N/A“.
Funkce ifnull()
ifnull()
funkce přijímá dva argumenty a vrací první, který není NULL. Pokud jsou oba argumenty NULL, vrátí hodnotu NULL.
První argument by tedy měla být hodnota, která může nebo nemusí mít hodnotu null, a druhý argument by měla být hodnota, kterou chcete nahradit hodnoty NULL.
Zde je návod, jak můžeme upravit předchozí dotaz tak, aby zobrazoval „N/A“ kdekoli Fax sloupec je NULL.
SELECT
CustomerId,
ifnull(Fax, 'N/A') AS Fax
FROM Customer
LIMIT 5;
Výsledek:
CustomerId Fax ---------- ------------- 1 +55 (12) 3923 2 N/A 3 N/A 4 N/A 5 +420 2 4172 5
Funkce coalesce()
coalesce()
funkce je velmi podobná funkci ifnull()
funkce. Rozdíl je v tom, že coalesce()
přijímá více než dva argumenty. Jednoduše vrátí první argument, který není NULL.
Můžeme jej tedy použít úplně stejným způsobem, jakým používáme ifnull()
poskytnutím dvou argumentů.
SELECT
CustomerId,
coalesce(Fax, 'N/A') AS Fax
FROM Customer
LIMIT 5;
Výsledek:
CustomerId Fax ---------- ------------- 1 +55 (12) 3923 2 N/A 3 N/A 4 N/A 5 +420 2 4172 5
Příkaz .nullvalue Dot
Při použití rozhraní příkazového řádku SQLite můžete použít .nullvalue
tečka, abyste se uchránili od nutnosti používat jednu z předchozích funkcí pokaždé, když děláte dotaz.
Při použití tohoto příkazu zadáte řetězec, který bude použit k nahrazení hodnot NULL.
Příklad:
.nullvalue N/A
Nyní, kdykoli spustíte dotaz, který vrací hodnoty NULL, nahradí tyto hodnoty NULL řetězec „N/A“.
SELECT
CustomerId,
Fax
FROM Customer
LIMIT 5;
Výsledek:
CustomerId Fax ---------- ------------- 1 +55 (12) 3923 2 N/A 3 N/A 4 N/A 5 +420 2 4172 5