ใช้ INTERVAL ในเงื่อนไข WHERE เพื่อเปรียบเทียบวันที่/เวลากับวันปัจจุบัน (NOW() หรือ CURDATE())
ตัวอย่างการใช้งาน
1. วันที่ปัจจุบัน
mysql> SELECT CURDATE(); +------------+ | curdate() | +------------+ | 2019-11-29 | +------------+
2. สร้างตาราง
mysql> CREATE TABLE DemoTable1806 (
DueDate DATETIME
);
Query OK, 0 rows affected (0.00 sec)
3. เพิ่มข้อมูล
mysql> INSERT INTO DemoTable1806 VALUES('2019-11-28');
mysql> INSERT INTO DemoTable1806 VALUES('2019-11-29');
mysql> INSERT INTO DemoTable1806 VALUES('2019-11-30');
mysql> INSERT INTO DemoTable1806 VALUES('2019-11-25');
4. แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable1806; +---------------------+ | DueDate | +---------------------+ | 2019-11-28 00:00:00 | | 2019-11-29 00:00:00 | | 2019-11-30 00:00:00 | | 2019-11-25 00:00:00 | +---------------------+
5. Query: DueDate >= (วันนี้ - 1 วัน)
mysql> SELECT * FROM DemoTable1806
WHERE DueDate >= NOW() - INTERVAL 1 DAY;
6. ผลลัพธ์ (สมมติ NOW() = 2019-11-29 ...)
+---------------------+ | DueDate | +---------------------+ | 2019-11-29 00:00:00 | | 2019-11-30 00:00:00 | +---------------------+
คำอธิบาย
NOW(): วันที่และเวลาปัจจุบัน (DATETIME)CURDATE(): เฉพาะวันที่ปัจจุบัน (DATE)INTERVAL 1 DAY: ช่วงเวลา 1 วันNOW() - INTERVAL 1 DAY: เวลา 24 ชั่วโมงก่อนหน้าDueDate >= ...: รวมถึงเวลาที่เท่ากัน (Greater than or Equal)
รูปแบบ INTERVAL อื่นๆ
| หน่วย | ตัวอย่าง |
|---|---|
| SECOND | INTERVAL 30 SECOND |
| MINUTE | INTERVAL 15 MINUTE |
| HOUR | INTERVAL 2 HOUR |
| DAY | INTERVAL 1 DAY |
| WEEK | INTERVAL 1 WEEK |
| MONTH | INTERVAL 1 MONTH |
| YEAR | INTERVAL 1 YEAR |
| COMBINED | INTERVAL '1 12:30:00' DAY_SECOND |
ตัวอย่างเพิ่มเติม
-- วันที่มากกว่าวันนี้ 7 วัน (อีก 1 สัปดาห์) WHERE DueDate >= CURDATE() + INTERVAL 7 DAY -- วันที่น้อยกว่าวันนี้ 30 วัน (30 วันที่แล้ว) WHERE DueDate <= CURDATE() - INTERVAL 30 DAY -- ช่วง 1 เดือนย้อนหลัง WHERE DueDate BETWEEN CURDATE() - INTERVAL 1 MONTH AND CURDATE()
สรุป
ใช้ WHERE date_col >= NOW() - INTERVAL 1 DAY เพื่อดึงข้อมูล 1 วันย้อนหลังถึงปัจจุบัน ใช้ NOW() สำหรับ DATETIME, CURDATE() สำหรับ DATE INTERVAL รองรับหน่วยเวลาทุกชนิด