V SQLite, coalesce()
funkce vrací kopii svého prvního argumentu, který není NULL, nebo NULL, pokud jsou všechny argumenty NULL.
Je to podobné jako ifnull()
funkce, kromě toho coalesce()
přijímá více než dva argumenty (ifnull()
přijímá pouze dva argumenty).
Syntaxe
Syntaxe vypadá takto:
coalesce(X,Y,...)
To znamená, že můžete poskytnout dva nebo více argumentů. Funkce pak vrátí první, která není NULL.
Příklad
Zde je příklad k demonstraci.
SELECT coalesce(NULL,1);
Výsledek:
1
Zde jsem uvedl dva argumenty a coalesce()
vrátil první hodnotu jinou než NULL, což je v tomto případě 1 .
Další příklady
Zde jsou další varianty, které demonstrují, jak se coalesce()
řeší každý případ.
.mode line
SELECT
coalesce(NULL,NULL,1,2,3),
coalesce(1,NULL,2,3),
coalesce(NULL,3,2,1),
coalesce(1,2,3,NULL),
coalesce(NULL,NULL);
Výsledek:
coalesce(NULL,NULL,1,2,3) = 1 coalesce(1,NULL,2,3) = 1 coalesce(NULL,3,2,1) = 3 coalesce(1,2,3,NULL) = 1 coalesce(NULL,NULL) =
Takže je to velmi přímočaré. Jednoduše vrátí první argument, který není NULL, bez ohledu na to, kolik argumentů je poskytnuto.
Všimněte si také, že pokud jsou všechny argumenty NULL, vrátí NULL.
Příklad databáze
Zde je příklad použití coalesce()
funkce v databázovém dotazu.
.mode column
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
Zde je návod, jak to vypadá bez použití coalesce()
funkce:
.mode column
SELECT
CustomerId,
Fax
FROM Customer
LIMIT 5;
Výsledek:
CustomerId Fax ---------- ------------------ 1 +55 (12) 3923-5566 2 3 4 5 +420 2 4172 5555
Takže coalesce()
funkce může být užitečná pro vrácení smysluplného řetězce namísto NULL.
Se třemi argumenty
Zde je příklad přidání třetího argumentu. To nám umožňuje projít několik možností, než dojdeme k NULL.
SELECT
CustomerId,
coalesce(Fax, Email, 'N/A') AS "Fax/Email"
FROM Customer
LIMIT 5;
Výsledek:
CustomerId Fax/Email ---------- ---------------------- 1 +55 (12) 3923-5566 2 [email protected] 3 [email protected] 4 [email protected] 5 +420 2 4172 5555