กรองข้อมูล DATETIME เฉพาะวันที่ ต้องใช้ฟังก์ชัน DATE()
คอลัมน์ DATETIME เก็บทั้งวันที่และเวลา ต้องใช้ DATE() ดึงเฉพาะส่วนวันที่มาเปรียบเทียบกับ String
รูปแบบคำสั่ง (Syntax)
SELECT * FROM yourTableName
WHERE DATE(yourDateTimeColumn) = 'date_string';
ตัวอย่างการใช้งาน
สร้างตาราง DateTimeDemo:
CREATE TABLE DateTimeDemo (
ArrivalTime DATETIME
);
เพิ่มข้อมูล:
INSERT INTO DateTimeDemo VALUES
(NOW()),
(DATE_ADD(NOW(), INTERVAL 2 YEAR)),
(DATE_ADD(NOW(), INTERVAL 1 YEAR)),
(DATE_ADD(NOW(), INTERVAL 4 YEAR)),
(DATE_ADD(NOW(), INTERVAL -2 YEAR)),
(DATE_ADD(NOW(), INTERVAL -1 YEAR));
ข้อมูล (สมมติ NOW = 2018-12-06 10:12:45):
| ArrivalTime |
|---|
| 2018-12-06 10:12:45 |
| 2020-12-06 10:13:10 |
| 2019-12-06 10:13:21 |
| 2022-12-06 10:13:27 |
| 2016-12-06 10:13:42 |
| 2017-12-06 10:13:50 |
ค้นหาวันที่ 2022-12-06:
SELECT * FROM DateTimeDemo
WHERE DATE(ArrivalTime) = '2022-12-06';
ผลลัพธ์:
| ArrivalTime |
|---|
| 2022-12-06 10:13:27 |
ข้อควรระวังด้านประสิทธิภาพ
DATE(column) = 'value' จะทำให้ Index ไม่ถูกใช้งาน (Non-SARGable)
วิธีแก้ (Best Practice): ใช้ Range Query แทน
-- ดีกว่า: ใช้ Index ได้
SELECT * FROM DateTimeDemo
WHERE ArrivalTime >= '2022-12-06 00:00:00'
AND ArrivalTime < '2022-12-07 00:00:00';
หรือ MySQL 8.0+ ใช้ Functional Index:
ALTER TABLE DateTimeDemo
ADD INDEX idx_arrival_date ((DATE(ArrivalTime)));