Lọc bản ghi theo khoảng thời gian trong MySQL
Để lấy các bản ghi sau một khoảng thời gian nhất định (ví dụ: 8 tháng) so với ngày hiện tại, sử dụng hàm INTERVAL kết hợp với CURRENT_DATE().
Cú pháp
SELECT * FROM ten_bang WHERE ten_cot_ngay >= (CURRENT_DATE() - INTERVAL 8 MONTH);
Ví dụ minh họa
Giả sử ngày hiện tại là: 2018-02-06
Tạo bảng DemoTable:
mysql> CREATE TABLE DemoTable (
StudentName VARCHAR(100),
AdmissionDate DATE
);
Query OK, 0 rows affected (0.75 sec)
Chèn dữ liệu mẫu:
mysql> INSERT INTO DemoTable VALUES('John', '2019-01-21');
Query OK, 1 row affected (0.27 sec)
mysql> INSERT INTO DemoTable VALUES('Chris', '2019-10-04');
Query OK, 1 row affected (0.25 sec)
mysql> INSERT INTO DemoTable VALUES('Robert', '2018-02-01');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES('David', '2019-07-07');
Query OK, 1 row affected (0.15 sec)
Xem tất cả bản ghi:
mysql> SELECT * FROM DemoTable;
Kết quả:
+-------------+---------------+ | StudentName | AdmissionDate | +-------------+---------------+ | John | 2019-01-21 | | Chris | 2019-10-04 | | Robert | 2018-02-01 | | David | 2019-07-07 | +-------------+---------------+ 4 rows in set (0.00 sec)
Truy vấn lấy bản ghi trong 8 tháng gần đây:
mysql> SELECT * FROM DemoTable WHERE AdmissionDate >= (CURRENT_DATE() - INTERVAL 8 MONTH);
Kết quả (với CURRENT_DATE = 2018-02-06, 8 tháng trước là 2017-06-06):
+-------------+---------------+ | StudentName | AdmissionDate | +-------------+---------------+ | John | 2019-01-21 | | Chris | 2019-10-04 | | David | 2019-07-07 | +-------------+---------------+ 3 rows in set (0.00 sec)
Bản ghi của Robert (2018-02-01) bị loại vì cũ hơn 8 tháng so với 2018-02-06.
Các biến thể hữu ích
INTERVAL 6 MONTH- 6 thángINTERVAL 1 YEAR- 1 nămINTERVAL 30 DAY- 30 ngàyNOW()thay vìCURRENT_DATE()nếu cột kiểu DATETIME