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

Truy vấn MySQL lấy bản ghi cũ hơn 1 tuần


Sử dụng so sánh ngày giờ với NOW() - INTERVAL 1 WEEK để lọc các bản ghi có thời gian trước 1 tuần tính từ hiện tại.

Cú pháp

SELECT * FROM table_name 
WHERE datetime_column < NOW() - INTERVAL 1 WEEK;

Ví dụ minh họa

mysql> CREATE TABLE DatesOfOneWeek (ArrivalTime DATETIME);
Query OK, 0 rows affected (0.87 sec)

mysql> INSERT INTO DatesOfOneWeek VALUES
(DATE_ADD(NOW(), INTERVAL 2 WEEK)),   -- tương lai
('2018-11-04'),                       -- cũ
('2018-11-25'),                       -- cũ
(DATE_ADD(NOW(), INTERVAL -1 WEEK)),  -- đúng 1 tuần trước
(DATE_ADD(NOW(), INTERVAL 1 WEEK));   -- tương lai
Query OK, 5 rows affected

Kiểm tra dữ liệu (giả sử NOW = 2018-12-06):

+---------------------+
| ArrivalTime         |
+---------------------+
| 2018-12-20 18:11:02 |  -- tương lai
| 2018-11-04 00:00:00 |  -- cũ
| 2018-11-25 00:00:00 |  -- cũ
| 2018-11-29 18:11:40 |  -- cũ hơn 1 tuần
| 2018-12-13 18:11:46 |  -- tương lai
+---------------------+

Truy vấn:

mysql> SELECT * FROM DatesOfOneWeek 
WHERE ArrivalTime < NOW() - INTERVAL 1 WEEK;

Kết quả (3 bản ghi cũ):

+---------------------+
| ArrivalTime         |
+---------------------+
| 2018-11-04 00:00:00 |
| 2018-11-25 00:00:00 |
| 2018-11-29 18:11:40 |
+---------------------+

Các biến thể INTERVAL

INTERVAL 1 DAY
INTERVAL 3 DAY
INTERVAL 1 WEEK
INTERVAL 1 MONTH
INTERVAL 1 YEAR
INTERVAL 6 HOUR
INTERVAL 30 MINUTE

Lưu ý

  • NOW() trả về datetime hiện tại (có giờ).
  • Nếu cột chỉ lưu DATE, dùng CURDATE() thay NOW().
  • Để dùng index: viết WHERE datetime_column < DATE_SUB(NOW(), INTERVAL 1 WEEK) (tương đương).