การเปรียบเทียบวันที่กับ NOW()
ใช้ WHERE date_column < NOW() เพื่อหาแถวที่วันที่/เวลาน้อยกว่าปัจจุบัน (คืออดีต)
ตัวอย่าง
mysql> create table DemoTable840(DueDate datetime);
Query OK, 0 rows affected (0.66 sec)
mysql> insert into DemoTable840 values('2019-08-09');
mysql> insert into DemoTable840 values('2019-07-05');
mysql> insert into DemoTable840 values('2019-08-10');
mysql> insert into DemoTable840 values('2019-07-13');
คำสั่ง SELECT (สมมติวันนี้ 2019-08-03)
mysql> select * from DemoTable840 where DueDate < NOW();
ผลลัพธ์ (เฉพาะวันที่ 5 และ 13 กรกฎาคม):
+-----------------------+
| DueDate |
+-----------------------+
| 2019-07-05 00:00:00 |
| 2019-07-13 00:00:00 |
+-----------------------+
การใช้งานแตกต่างกัน
-- รวมวันนี้ด้วย (<=)
WHERE DueDate <= CURDATE()
-- เฉพาะวันที่ (ไม่สนใจเวลา) ใช้ DATE()
WHERE DATE(DueDate) < CURDATE()
-- เก่ากว่า 30 วัน
WHERE DueDate < DATE_SUB(NOW(), INTERVAL 30 DAY)
หมายเหตุ
NOW()รวมเวลา,CURDATE()แค่วันที่- คอลัมน์ DATE เทียบกับ CURDATE() ได้ตรง, DATETIME ควรใช้ DATE() หรือ NOW()
- ใช้ Index บนคอลัมน์วันที่ได้ (Sargable) ถ้าไม่ห่อด้วยฟังก์ชันฝั่งคอลัมน์
สรุป
ใช้ WHERE date_col < NOW() หรือ WHERE DATE(date_col) < CURDATE() เพื่อกรองข้อมูลอดีต