В SQLite coalesce()
функцията връща копие на първия си аргумент, различен от NULL, или NULL, ако всички аргументи са NULL.
Това е подобно на ifnull()
функция, с изключение на coalesce()
приема повече от два аргумента (ifnull()
приема само два аргумента).
Синтаксис
Синтаксисът е така:
coalesce(X,Y,...)
Това означава, че можете да предоставите два или повече аргумента. След това функцията ще върне първия, който не е NULL.
Пример
Ето пример за демонстрация.
SELECT coalesce(NULL,1);
Резултат:
1
Тук предоставих два аргумента и coalesce()
върна първата стойност, различна от NULL, която в този случай е 1 .
Още примери
Ето още варианти, за да демонстрирате как coalesce()
обработва всеки случай.
.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);
Резултат:
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) =
Така че е много просто. Той просто връща първия аргумент, който не е NULL, независимо колко аргумента са предоставени.
Също така забележете, че ако всички аргументи са NULL, тогава той връща NULL.
Пример за база данни
Ето пример за използване на coalesce()
функция в заявка за база данни.
.mode column
SELECT
CustomerId,
coalesce(Fax, 'N/A') AS Fax
FROM Customer
LIMIT 5;
Резултат:
CustomerId Fax ---------- ------------- 1 +55 (12) 3923 2 N/A 3 N/A 4 N/A 5 +420 2 4172 5
Ето как изглежда без да използвате coalesce()
функция:
.mode column
SELECT
CustomerId,
Fax
FROM Customer
LIMIT 5;
Резултат:
CustomerId Fax ---------- ------------------ 1 +55 (12) 3923-5566 2 3 4 5 +420 2 4172 5555
Така че coalesce()
функцията може да бъде полезна за връщане на смислен низ вместо NULL.
С три аргумента
Ето пример за добавяне на трети аргумент. Това ни позволява да преминем през множество опции, преди да стигнем до NULL.
SELECT
CustomerId,
coalesce(Fax, Email, 'N/A') AS "Fax/Email"
FROM Customer
LIMIT 5;
Резултат:
CustomerId Fax/Email ---------- ---------------------- 1 +55 (12) 3923-5566 2 [email protected] 3 [email protected] 4 [email protected] 5 +420 2 4172 5555