การใช้ DATE_ADD และ INTERVAL สำหรับช่วงเวลา
เมื่อต้องการดึงบันทึกที่มีวันเวลา (datetime) อยู่ในช่วง 12 ชั่วโมงข้างหน้า สามารถใช้ฟังก์ชัน DATE_ADD() ร่วมกับ INTERVAL และ BETWEEN
รูปแบบคำสั่ง
SELECT * FROM your_table
WHERE DATE_ADD(your_datetime_column, INTERVAL 12 HOUR)
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 12 HOUR);
ตัวอย่างเต็ม
สร้างตาราง DemoTable:
CREATE TABLE DemoTable (DueDateTime DATETIME);
เพิ่มข้อมูลตัวอย่าง:
INSERT INTO DemoTable VALUES('2019-07-12 10:50:30');
INSERT INTO DemoTable VALUES('2019-07-12 22:02:00');
INSERT INTO DemoTable VALUES('2019-07-12 11:12:10');
INSERT INTO DemoTable VALUES('2019-07-12 09:02:00');
Query ดึงข้อมูลที่ DueDateTime อยู่ในอีก 12 ชั่วโมง:
SELECT * FROM DemoTable
WHERE DATE_ADD(DueDateTime, INTERVAL 12 HOUR)
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 12 HOUR);
อธิบาย Logic
DATE_ADD(DueDateTime, INTERVAL 12 HOUR)= เวลาที่มาหลัง DueDateTime 12 ชั่วโมงNOW()= เวลาปัจจุบันDATE_ADD(NOW(), INTERVAL 12 HOUR)= เวลาอีก 12 ชั่วโมงจากนี้BETWEEN= ตรวจสอบว่า "เวลาหลัง DueDateTime 12 ชม." อยู่ระหว่าง "ตอนนี้" และ "อีก 12 ชม."
หมายเหตุ: Query นี้จะดึงรายการที่ "ยังไม่ถึง DueDateTime" แต่ "จะถึงภายใน 12 ชม." - เหมาะสำหรับระบบเตือนเตือน (Notification/Reminder)
รูปแบบอื่นที่ใช้บ่อย
-- วิธีที่ 2: ใช้ WHERE แบบตรงไปตรงมา
SELECT * FROM DemoTable
WHERE DueDateTime BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 12 HOUR);
-- วิธีที่ 3: ใช้ NOW() ฝั่งขวา (Performance ดีกว่าในบางกรณี)
SELECT * FROM DemoTable
WHERE DueDateTime >= NOW()
AND DueDateTime < DATE_ADD(NOW(), INTERVAL 12 HOUR);