Trong MySQL, COALESCE()
toán tử trả về giá trị không phải NULL đầu tiên trong danh sách hoặc NULL nếu không có giá trị không phải NULL.
Cú pháp
Cú pháp như sau:
COALESCE(value,...)
Ví dụ
Dưới đây là một ví dụ đơn giản để chứng minh:
SELECT COALESCE(null, 'Fish', 'Rabbit');
Kết quả:
Fish
Trong trường hợp này, Fish
là giá trị không phải NULL đầu tiên và vì vậy COALESCE()
đã trả lại giá trị đó.
Rabbit
cũng là một giá trị không phải NULL, nhưng nó đến sau Fish
và vì vậy nó đã không được trả lại.
Khi tất cả các giá trị đều KHÔNG ĐẦY ĐỦ
Nếu tất cả các giá trị là NULL
, COALESCE()
trả về NULL
:
SELECT COALESCE( null, null );
Kết quả:
NULL
Biểu thức
COALESCE()
trả về giá trị hiện tại của biểu thức đầu tiên mà ban đầu không đánh giá thành NULL
. Do đó, nếu chúng ta truyền một biểu thức như sau:
SELECT COALESCE( null, 2 * 10 );
Chúng tôi nhận được điều này:
20
Ví dụ về cơ sở dữ liệu
Giả sử chúng ta chạy truy vấn sau:
SELECT
PetName,
PetType
FROM Pets;
Và chúng tôi nhận được kết quả sau:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk NULL Moo Cow Omph NULL
Chúng ta có thể thấy rằng hai hàng có giá trị NULL trong cột DOB.
Nếu chúng tôi muốn thay thế NULL
với một giá trị khác, chúng tôi có thể thay đổi truy vấn như sau:
SELECT
PetName,
COALESCE(PetType, 'Unknown') AS "PetType"
FROM Pets;
Kết quả:
PetName PetType ------- ------- Meow Cat Woof Dog Tweet Bird Awk Unknown Moo Cow Omph Unknown
Trong trường hợp này, chúng tôi đã thay thế tất cả các giá trị NULL bằng chuỗi Unknown
.
Tuy nhiên, nó không cần phải là một chuỗi. Dưới đây là một ví dụ khác thay thế các giá trị NULL bằng một số nguyên:
SELECT
EmployeeName,
Salary,
COALESCE(Salary, 0) AS "Salary (adjusted)"
FROM Employees;
Kết quả:
EmployeeName Salary Salary (adjusted) -------------- ------ ----------------- Homer Einstein NULL 0 Bart Hawking 100000 100000
Số lượng đối số không hợp lệ
Sử dụng COALESCE()
mà không có bất kỳ đối số nào dẫn đến lỗi:
SELECT COALESCE();
Kết quả:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1