กรองวันที่ในอนาคต 10 วันด้วย DATE_ADD และ WHERE
ใช้ DATE_ADD(NOW(), INTERVAL 10 DAY) คำนวณวันที่ 10 วันข้างหน้า แล้วกรองวันที่ในตารางที่มากกว่าค่านั้น
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (ShippingDate DATE);
-- สมมติ NOW() = '2019-06-04 20:43:57'
INSERT INTO DemoTable VALUES
('2019-06-16'), ('2019-05-31'), ('2019-05-24'), ('2019-06-24');
ข้อมูลในตาราง
+--------------+ | ShippingDate | +--------------+ | 2019-06-16 | | 2019-05-31 | | 2019-05-24 | | 2019-06-24 | +--------------+
คำสั่งดึงวันที่ > NOW() + 10 วัน
SELECT * FROM DemoTable WHERE ShippingDate > DATE_ADD(NOW(), INTERVAL 10 DAY);
ผลลัพธ์ (NOW()+10 = 2019-06-14)
+--------------+ | ShippingDate | +--------------+ | 2019-06-16 | | 2019-06-24 | +--------------+
คำอธิบาย:
DATE_ADD(NOW(), INTERVAL 10 DAY)บวก 10 วันกับวันที่/เวลาปัจจุบันShippingDate > ...เปรียบเทียบ DATE กับ DATETIME → MySQL แปลง DATE เป็น DATETIME 00:00:00 ก่อนเปรียบเทียบ- วันที่ 2019-06-16 (00:00:00) > 2019-06-14 20:43:57 → ตรงเงื่อนไข
รูปแบบอื่น:
WHERE ShippingDate > CURDATE() + INTERVAL 10 DAY(ใช้วันที่อย่างเดียว ไม่รวมเวลา)WHERE ShippingDate >= DATE_ADD(CURDATE(), INTERVAL 10 DAY)(รวมวันพอดี 10 วัน)
⚐ ประสิทธิภาพ: หาก ShippingDate มี Index ให้คำนวณวันที่เป้าหมายใน Application แล้วส่งมาเป็นค่าคงที่ WHERE ShippingDate > '2019-06-14' เพื่อให้ใช้ Index ได้เต็มที่