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

Query MySQL ดึงข้อมูลที่จะมาถึงในอีก 12 ชั่วโมง

การใช้ 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);