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()thayNOW(). - Để dùng index: viết
WHERE datetime_column < DATE_SUB(NOW(), INTERVAL 1 WEEK)(tương đương).