Để xóa các bản ghi có ngày (DATE) cũ hơn 30 ngày so với một ngày tham chiếu cố định, dùng DELETE ... WHERE date_col < (ref_date - INTERVAL 30 DAY).
Ví dụ minh họa
Tạo bảng:
mysql> create table DemoTable (
DueDate date
);
Chèn dữ liệu:
mysql> insert into DemoTable values('2019-08-25');
mysql> insert into DemoTable values('2019-07-01');
mysql> insert into DemoTable values('2019-06-20');
mysql> insert into DemoTable values('2019-09-02');
Hiển thị dữ liệu:
mysql> select * from DemoTable;
Kết quả:
+------------+ | DueDate | +------------+ | 2019-08-25 | | 2019-07-01 | | 2019-06-20 | | 2019-09-02 | +------------+
Xóa ngày < (2019-08-31 - 30 ngày = 2019-08-01)
mysql> delete from DemoTable where DueDate < ('2019-08-31' - INTERVAL 30 DAY);
Kết quả: Query OK, 2 rows affected
Kiểm tra lại:
mysql> select * from DemoTable;
Kết quả (còn lại 2 bản ghi ≥ 2019-08-01):
+------------+ | DueDate | +------------+ | 2019-08-25 | | 2019-09-02 | +------------+
Giải thích:
'2019-08-31' - INTERVAL 30 DAY= 2019-08-01DueDate < '2019-08-01': Xóa ngày 2019-07-01 và 2019-06-20- 2019-08-25 và 2019-09-02 ≥ 2019-08-01 → giữ lại
Ứng dụng thực tế: Thay ngày cố định '2019-08-31' bằng CURDATE() để xóa dữ liệu cũ hơn 30 ngày so với hôm nay (cron job dọn dẹp): DELETE FROM DemoTable WHERE DueDate < (CURDATE() - INTERVAL 30 DAY).