Để so sánh cột TIMESTAMP (hoặc DATETIME) chỉ theo phần ngày, dùng hàm DATE() trích xuất ngày.
Ví dụ minh họa
Tạo bảng cột timestamp:
CREATE TABLE comparingTimestampDemo (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
AdmissionDate TIMESTAMP
);
INSERT INTO comparingTimestampDemo (AdmissionDate) VALUES
('2019-03-31'), ('2019-04-10'), ('2019-04-15'),
('2019-03-29'), ('2019-04-07');
Dữ liệu (MySQL tự thêm 00:00:00 cho TIMESTAMP):
+----+---------------------+ | Id | AdmissionDate | +----+---------------------+ | 1 | 2019-03-31 00:00:00 | | 2 | 2019-04-10 00:00:00 | | 3 | 2019-04-15 00:00:00 | | 4 | 2019-03-29 00:00:00 | | 5 | 2019-04-07 00:00:00 | +----+---------------------+
Tìm các bản ghi có ngày nhập viện trước 3 ngày so với hôm nay:
SELECT DATE(`AdmissionDate`) FROM comparingTimestampDemo WHERE DATE(`AdmissionDate`) < CURDATE() - INTERVAL 3 DAY;
Kết quả (giả sử hôm nay 2019-04-11):
+-----------------------+ | DATE(`AdmissionDate`) | +-----------------------+ | 2019-03-31 | | 2019-03-29 | +-----------------------+
Giải thích:
DATE(AdmissionDate)lấy phần ngày, bỏ giờ.CURDATE()trả về ngày hiện tại.INTERVAL 3 DAYtrừ 3 ngày.
Mẹo hiệu năng: Tránh dùng hàm trên cột trong WHERE (như DATE(col) < ...) vì không dùng được index. Thay vào đó, so sánh trực tiếp:
WHERE AdmissionDate < DATE_SUB(CURDATE(), INTERVAL 3 DAY)
Cách này cho phép dùng index trên AdmissionDate.