ใช้ DATE(column) != CURDATE() เพื่อกรองเฉพาะวันที่ไม่ใช่วันนี้
ตัวอย่างการใช้งาน
1. สร้างตารางและข้อมูล (สมมติวันนี้ 2019-07-03)
mysql> CREATE TABLE DemoTable (Name VARCHAR(100), DueDate DATETIME);
mysql> INSERT INTO DemoTable VALUES
('Chris', '2019-06-24'), ('Chris', '2018-01-01'), ('Robert', '2019-07-03'), ('Carol', '2019-08-03');
2. Query ยกเว้นวันนี้
mysql> SELECT * FROM DemoTable WHERE DATE(DueDate) != CURDATE();
ผลลัพธ์ (ตัด Robert วันที่ 2019-07-03 ออก)
+-------+---------------------+ | Name | DueDate | +-------+---------------------+ | Chris | 2019-06-24 00:00:00 | | Chris | 2018-01-01 00:00:00 | | Carol | 2019-08-03 00:00:00 | +-------+---------------------+
ฟังก์ชันวันที่ที่เกี่ยวข้อง
| ฟังก์ชัน | คืนค่า | ตัวอย่าง |
|---|---|---|
CURDATE() | วันที่ปัจจุบัน | 2019-07-03 |
CURRENT_DATE() | วันที่ปัจจุบัน | 2019-07-03 |
NOW() | วันที่เวลาปัจจุบัน | 2019-07-03 14:30:00 |
DATE(datetime) | ส่วนวันที่อย่างเดียว | DATE('2019-07-03 14:30') → '2019-07-03' |
ประสิทธิภาพ: หลีกเลี่ยงฟังก์ชันบนคอลัมน์
-- ช้า: ไม่ใช้ Index ได้ WHERE DATE(DueDate) != CURDATE() -- เร็ว: ใช้ Range Query (ต้องมี Index บน DueDate) WHERE DueDate < CURDATE() OR DueDate >= CURDATE() + INTERVAL 1 DAY
คำอธิบาย: วิธี Range Query ครอบคลุมทั้งวันที่น้อยกว่าวันนี้ และมากกว่าหรือเท่ากับพรุ่งนี้ = ไม่ใช่วันนี้