Khi cột ngày có thể NULL, dùng IFNULL(cot_ngay, cot_du_phong) trong ORDER BY để thay thế NULL bằng cột dự phòng trước khi sắp xếp.
Ví dụ minh họa
Tạo bảng:
mysql> CREATE TABLE DemoTable (
added_date DATE,
updated_date DATE
);
Chèn dữ liệu (có NULL):
mysql> INSERT INTO DemoTable VALUES('2019-01-10', '2019-06-01');
mysql> INSERT INTO DemoTable VALUES('2019-05-19', NULL);
mysql> INSERT INTO DemoTable VALUES(NULL, '2019-09-05');
Xem dữ liệu:
mysql> SELECT * FROM DemoTable;
Kết quả
+------------+--------------+ | added_date | updated_date | +------------+--------------+ | 2019-01-10 | 2019-06-01 | | 2019-05-19 | NULL | | NULL | 2019-09-05 | +------------+--------------+
Trường hợp 1: Sắp xếp giảm dần, ưu tiên updated_date, nếu NULL thì dùng added_date:
mysql> SELECT * FROM DemoTable
-> ORDER BY IFNULL(updated_date, added_date) DESC;
+------------+--------------+ | added_date | updated_date | +------------+--------------+ | NULL | 2019-09-05 | | 2019-01-10 | 2019-06-01 | | 2019-05-19 | NULL | +------------+--------------+
Trường hợp 2: Sắp xếp tăng dần:
mysql> SELECT * FROM DemoTable
-> ORDER BY IFNULL(updated_date, added_date);
+------------+--------------+ | added_date | updated_date | +------------+--------------+ | 2019-05-19 | NULL | | 2019-01-10 | 2019-06-01 | | NULL | 2019-09-05 | +------------+--------------+
Lưu ý: IFNULL chỉ nhận 2 tham số. Cần nhiều cấp độ dự phòng hơn thì dùng COALESCE(cot1, cot2, cot3, ...).