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

กรองข้อมูลวัน เดือน ปีปัจจุบันใน MySQL

ใช้ฟังก์ชัน 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 ทำงานได้