Trong SQLite, coalesce()
hàm trả về một bản sao của đối số không phải NULL đầu tiên của nó hoặc NULL nếu tất cả các đối số là NULL.
Nó tương tự với ifnull()
hàm, ngoại trừ coalesce()
chấp nhận nhiều hơn hai đối số (ifnull()
chỉ chấp nhận hai đối số).
Cú pháp
Cú pháp như sau:
coalesce(X,Y,...)
Điều này có nghĩa là, bạn có thể cung cấp hai hoặc nhiều đối số. Sau đó, hàm sẽ trả về giá trị đầu tiên không phải là NULL.
Ví dụ
Đây là một ví dụ để chứng minh.
SELECT coalesce(NULL,1);
Kết quả:
1
Ở đây tôi đã cung cấp hai đối số và coalesce()
đã trả về giá trị không phải NULL đầu tiên, trong trường hợp này là 1 .
Các ví dụ khác
Dưới đây là các biến thể khác để chứng minh cách coalesce()
xử lý từng trường hợp.
.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);
Kết quả:
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) =
Vì vậy, nó rất đơn giản. Nó chỉ trả về đối số đầu tiên không phải là NULL, bất kể có bao nhiêu đối số được cung cấp.
Cũng lưu ý rằng nếu tất cả các đối số là NULL, thì nó trả về NULL.
Ví dụ về cơ sở dữ liệu
Dưới đây là một ví dụ về việc sử dụng coalesce()
trong một truy vấn cơ sở dữ liệu.
.mode column
SELECT
CustomerId,
coalesce(Fax, 'N/A') AS Fax
FROM Customer
LIMIT 5;
Kết quả:
CustomerId Fax ---------- ------------- 1 +55 (12) 3923 2 N/A 3 N/A 4 N/A 5 +420 2 4172 5
Đây là giao diện của nó khi không sử dụng coalesce()
chức năng:
.mode column
SELECT
CustomerId,
Fax
FROM Customer
LIMIT 5;
Kết quả:
CustomerId Fax ---------- ------------------ 1 +55 (12) 3923-5566 2 3 4 5 +420 2 4172 5555
Vì vậy, coalesce()
hàm có thể hữu ích để trả về một chuỗi có nghĩa thay vì NULL.
Với ba lập luận
Dưới đây là một ví dụ về việc thêm đối số thứ ba. Điều này cho phép chúng tôi chạy qua nhiều tùy chọn trước khi đến NULL.
SELECT
CustomerId,
coalesce(Fax, Email, 'N/A') AS "Fax/Email"
FROM Customer
LIMIT 5;
Kết quả:
CustomerId Fax/Email ---------- ---------------------- 1 +55 (12) 3923-5566 2 [email protected] 3 [email protected] 4 [email protected] 5 +420 2 4172 5555