Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL: เลือกแถวที่วันที่เก่ากว่าวันที่ปัจจุบัน

การเปรียบเทียบวันที่กับ 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() เพื่อกรองข้อมูลอดีต