Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách so sánh timestamp trong MySQL

Để 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 DAY trừ 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.