Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Truy vấn MySQL sắp xếp ngày có giá trị NULL

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, ...).