การค้นหาข้อมูลวันที่ในช่วง 14 วันที่ผ่านมา (Recent 14 days)
ใช้ DATE_SUB(CURDATE(), INTERVAL 14 DAY) คำนวณวันที่ 14 วันที่แล้ว แล้วกรองวันที่มากกว่าค่านั้น
สร้างตารางและข้อมูล
mysql> create table DemoTable1392 (
-> ArrivalDate date
-> );
Query OK, 0 rows affected (0.43 sec)
mysql> insert into DemoTable1392 values('2019-09-10');
mysql> insert into DemoTable1392 values('2019-09-26');
mysql> insert into DemoTable1392 values('2019-09-12');
mysql> insert into DemoTable1392 values('2018-09-20');
mysql> insert into DemoTable1392 values('2019-10-11');
ข้อมูลและวันที่ปัจจุบัน
mysql> select * from DemoTable1392; +-------------+ | ArrivalDate | +-------------+ | 2019-09-10 | | 2019-09-26 | | 2019-09-12 | | 2018-09-20 | | 2019-10-11 | +-------------+ mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-09-26 | +------------+
คำสั่ง WHERE ด้วย DATE_SUB
mysql> select * from DemoTable1392
-> where ArrivalDate > date_sub(curdate(), interval 14 day);
ผลลัพธ์ (วันที่ > 2019-09-12)
+-------------+ | ArrivalDate | +-------------+ | 2019-09-26 | | 2019-10-11 | +-------------+
การคำนวณ
- CURDATE() = 2019-09-26
- DATE_SUB(..., INTERVAL 14 DAY) = 2019-09-12
- ArrivalDate > 2019-09-12 → 2019-09-26 และ 2019-10-11
รูปแบบอื่นที่เทียบเท่า
-- ใช้ DATE_ADD กับลบ
WHERE ArrivalDate > DATE_ADD(CURDATE(), INTERVAL -14 DAY)
-- ใช้ INTERVAL arithmetic (MySQL 8.0+)
WHERE ArrivalDate > CURDATE() - INTERVAL 14 DAY
-- รวมวันปัจจุบัน (>= แทน >)
WHERE ArrivalDate >= CURDATE() - INTERVAL 13 DAY
กรณี DATETIME (มีเวลา)
-- หา 14 วันที่ผ่านมา รวมเวลา
WHERE ArrivalDateTime >= DATE_SUB(NOW(), INTERVAL 14 DAY)
-- หรือ truncate เวลา
WHERE DATE(ArrivalDateTime) > DATE_SUB(CURDATE(), INTERVAL 14 DAY)
ประสิทธิภาพและ Index
- คอลัมน์
DATE/DATETIMEที่มี Index — ใช้ Range Scan ได้เร็ว - หลีกเลี่ยง function บนคอลัมน์ (เช่น
DATE(ArrivalDateTime)) เพราะจะไม่ใช้ index - ควรเก็บวันที่เป็น
DATEหรือDATETIMEtype ไม่ใช่ VARCHAR