ใช้ฟังก์ชัน YEAR(), MONTH(), DAY() ร่วมกับ NOW() หรือ CURDATE() เพื่อกรองข้อมูลตามวันที่ปัจจุบัน
ตัวอย่างตาราง
mysql> create table userLoginInformation (
-> UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserName varchar(20),
-> UserLoginTime datetime
-> );
mysql> insert into userLoginInformation(UserName,UserLoginTime) values
-> ('John','2016-02-12'),('Carol','2019-01-31'),('Bob','2019-02-19'),
-> ('Sam','2018-02-19'),('Larry','2017-04-18');
กรองตามปีปัจจุบัน
mysql> select * from userLoginInformation where YEAR(UserLoginTime) = YEAR(NOW());
กรองตามเดือนปัจจุบัน
mysql> select * from userLoginInformation where MONTH(UserLoginTime) = MONTH(NOW());
กรองตามวันปัจจุบัน
mysql> select * from userLoginInformation where DAY(UserLoginTime) = DAY(NOW());
กรองตามวันที่ปัจจุบันทั้งหมด (วัน เดือน ปี)
mysql> select * from userLoginInformation where DATE(UserLoginTime) = CURDATE();
กรองช่วงเวลา: วันนี้
mysql> select * from userLoginInformation
-> where UserLoginTime >= CURDATE()
-> and UserLoginTime < CURDATE() + INTERVAL 1 DAY;
กรองช่วงเวลา: เดือนนี้
mysql> select * from userLoginInformation
-> where UserLoginTime >= DATE_FORMAT(NOW(), '%Y-%m-01')
-> and UserLoginTime < DATE_FORMAT(NOW(), '%Y-%m-01') + INTERVAL 1 MONTH;
กรองช่วงเวลา: ปีนี้
mysql> select * from userLoginInformation
-> where UserLoginTime >= DATE_FORMAT(NOW(), '%Y-01-01')
-> and UserLoginTime < DATE_FORMAT(NOW(), '%Y-01-01') + INTERVAL 1 YEAR;
⚡ ประสิทธิภาพ: หลีกเลี่ยงฟังก์ชันบนคอลัมน์
ไม่ดี (Full Table Scan):
WHERE YEAR(UserLoginTime) = YEAR(NOW())
ดี (ใช้ Index ได้):
WHERE UserLoginTime >= '2024-01-01' AND UserLoginTime < '2025-01-01'
คำนวณค่าขอบเขตใน Application แล้วส่งมาเป็นค่าคงที่ จะทำให้ Index ทำงานได้