W SQLite funkcja coalesce()
funkcja zwraca kopię swojego pierwszego argumentu innego niż NULL lub NULL, jeśli wszystkie argumenty są NULL.
Jest podobny do ifnull()
funkcja, z wyjątkiem tego, że coalesce()
akceptuje więcej niż dwa argumenty (ifnull()
akceptuje tylko dwa argumenty).
Składnia
Składnia wygląda tak:
coalesce(X,Y,...)
Oznacza to, że możesz podać dwa lub więcej argumentów. Funkcja zwróci wtedy pierwszy, który nie jest NULL.
Przykład
Oto przykład do zademonstrowania.
SELECT coalesce(NULL,1);
Wynik:
1
Tutaj podałem dwa argumenty i coalesce()
zwrócił pierwszą wartość inną niż NULL, która w tym przypadku wynosi 1 .
Więcej przykładów
Oto więcej odmian, które pokazują, jak coalesce()
obsługuje każdy przypadek.
.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);
Wynik:
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) =
Więc to jest bardzo proste. Po prostu zwraca pierwszy argument, który nie jest NULL, niezależnie od liczby podanych argumentów.
Zauważ też, że jeśli wszystkie argumenty są NULL, to zwraca NULL.
Przykład bazy danych
Oto przykład użycia coalesce()
funkcja w zapytaniu do bazy danych.
.mode column
SELECT
CustomerId,
coalesce(Fax, 'N/A') AS Fax
FROM Customer
LIMIT 5;
Wynik:
CustomerId Fax ---------- ------------- 1 +55 (12) 3923 2 N/A 3 N/A 4 N/A 5 +420 2 4172 5
Oto jak to wygląda bez użycia coalesce()
funkcja:
.mode column
SELECT
CustomerId,
Fax
FROM Customer
LIMIT 5;
Wynik:
CustomerId Fax ---------- ------------------ 1 +55 (12) 3923-5566 2 3 4 5 +420 2 4172 5555
Więc coalesce()
funkcja może być przydatna do zwracania znaczącego ciągu zamiast NULL.
Z trzema argumentami
Oto przykład dodania trzeciego argumentu. To pozwala nam przejrzeć wiele opcji przed dotarciem do NULL.
SELECT
CustomerId,
coalesce(Fax, Email, 'N/A') AS "Fax/Email"
FROM Customer
LIMIT 5;
Wynik:
CustomerId Fax/Email ---------- ---------------------- 1 +55 (12) 3923-5566 2 [email protected] 3 [email protected] 4 [email protected] 5 +420 2 4172 5555