Trong MariaDB, 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, 'Red', 'Black');
Kết quả:
Red
Trong trường hợp này, Red
là giá trị không phải NULL đầu tiên và vì vậy COALESCE()
đã trả lại giá trị đó.
Black
cũng không phải NULL, nhưng nó đến sau Red
và vì vậy nó đã không được trả lại.
Ví dụ về cơ sở dữ liệu
Giả sử chúng ta chạy truy vấn sau:
SELECT
PetName,
DOB AS "Date of Birth"
FROM Pets;
Và chúng tôi nhận được kết quả sau:
+---------+---------------+ | PetName | Date of Birth | +---------+---------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | NULL | | Meow | NULL | +---------+---------------+
Chúng ta có thể thấy rằng hai hàng cuối cù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(DOB, 'None Supplied') AS "Date of Birth"
FROM Pets;
Kết quả:
+---------+---------------+ | PetName | Date of Birth | +---------+---------------+ | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | None Supplied | | Meow | None Supplied | +---------+---------------+
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, 5 * 2 );
Chúng tôi nhận được điều này:
10
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
COALESCE()
so với IFNULL()
Khi được sử dụng với hai giá trị, COALESCE()
hoạt động giống như IFNULL
:
SET @a = null, @b = 52;
SELECT
COALESCE(@a, @b),
IFNULL(@a, @b);
Kết quả:
+------------------+----------------+ | COALESCE(@a, @b) | IFNULL(@a, @b) | +------------------+----------------+ | 52 | 52 | +------------------+----------------+
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): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1