ใช้ ORDER BY ร่วมกับ IS NULL เพื่อจัดเรียงวันที่ และวางค่า NULL ไว้ท้ายสุด
รูปแบบไวยากรณ์
SELECT * FROM yourTableName ORDER BY (yourDateColumnName IS NULL), yourDateColumnName DESC;
(yourDateColumnName IS NULL) จะคืนค่า 1 (TRUE) สำหรับ NULL และ 0 (FALSE) สำหรับค่าที่มีข้อมูล เรียงจากน้อยไปมาก (0 ก่อน 1) ทำให้ค่าที่ไม่ใช่ NULL อยู่ก่อน
ตัวอย่างการใช้งาน
สร้างตาราง:
mysql> CREATE TABLE DateColumnWithNullDemo ( Id INT NOT NULL AUTO_INCREMENT, LoginDateTime DATETIME, PRIMARY KEY(Id) );
เพิ่มข้อมูล (มี NULL หลายแถว):
INSERT INTO DateColumnWithNullDemo(LoginDateTime) VALUES(DATE_ADD(NOW(), INTERVAL -1 YEAR)),(NULL),(NULL),(NOW()),(CURDATE()),('2017-08-25 15:30:35'),(NULL),('2016-12-25 16:55:55'),(NULL),('2014-11-12 10:20:23'),('2020-01-01 06:45:23');
คำสั่งจัดเรียง NULL ท้ายสุด วันที่มากไปน้อย:
mysql> SELECT * FROM DateColumnWithNullDemo ORDER BY (LoginDateTime IS NULL), LoginDateTime DESC;
ผลลัพธ์:
+----+---------------------+ | Id | LoginDateTime | +----+---------------------+ | 11 | 2020-01-01 06:45:23 | | 4 | 2019-01-29 17:07:54 | | 5 | 2019-01-29 00:00:00 | | 1 | 2018-01-29 17:07:20 | | 6 | 2017-08-25 15:30:35 | | 8 | 2016-12-25 16:55:55 | | 10 | 2014-11-12 10:20:23 | | 2 | NULL | | 3 | NULL | | 7 | NULL | | 9 | NULL | +----+---------------------+ 11 rows in set (0.00 sec)
วันที่ที่มีค่าอยู่ก่อน เรียงจากใหม่ไปเก่า NULL อยู่ท้ายสุดทั้งหมด