So sánh ngày (bỏ qua giờ) với ngày hiện tại trong MySQL
Khi cột kiểu DATETIME hoặc TIMESTAMP chứa cả ngày và giờ, dùng hàm DATE() để trích xuất phần ngày, so sánh với CURDATE().
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
RegistrationLastDate DATETIME
);
Giả sử ngày hiện tại: 2019-09-03
mysql> INSERT INTO DemoTable VALUES
('2019-08-01'),
('2019-09-03 09:50:56'),
('2019-09-03'),
('2019-09-02'),
('2019-09-02 09:50:00');
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
Kết quả:
+----------------------+ | RegistrationLastDate | +----------------------+ | 2019-08-01 00:00:00 | | 2019-09-03 09:50:56 | | 2019-09-03 00:00:00 | | 2019-09-02 00:00:00 | | 2019-09-02 09:50:00 | +----------------------+
3. Truy vấn: Lấy bản ghi ngày = hôm nay
mysql> SELECT * FROM DemoTable
WHERE DATE(RegistrationLastDate) = CURDATE();
4. Kết quả
+----------------------+ | RegistrationLastDate | +----------------------+ | 2019-09-03 09:50:56 | | 2019-09-03 00:00:00 | +----------------------+
Giải thích:
DATE(datetime): Trích xuất phần ngày (bỏ giờ: 09:50:56 → 2019-09-03)CURDATE(): Trả về ngày hiện tại (2019-09-03)- So sánh ngày thuần túy, bỏ qua thành phần thời gian
Lưu ý hiệu năng: DATE(col) = CURDATE() không dùng được index trên cột datetime. Tốt hơn dùng range:
WHERE RegistrationLastDate >= CURDATE() AND RegistrationLastDate < CURDATE() + INTERVAL 1 DAY