Lọc bản ghi theo ngày trong MySQL
Sử dụng toán tử so sánh >= (lớn hơn hoặc bằng) trên cột kiểu DATE hoặc DATETIME để lấy các bản ghi từ một ngày cụ thể trở đi.
Ví dụ minh họa
Tạo bảng DemoTable708:
mysql> CREATE TABLE DemoTable708 (
CustomerName VARCHAR(100),
ShippingDate DATE
);
Query OK, 0 rows affected (0.51 sec)
Chèn dữ liệu:
mysql> INSERT INTO DemoTable708 VALUES('John', '2019-01-21');
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO DemoTable708 VALUES('Chris', '2019-03-24');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable708 VALUES('Robert', '2019-04-26');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable708 VALUES('David', '2019-07-22');
Query OK, 1 row affected (0.17 sec)
Xem tất cả bản ghi:
mysql> SELECT * FROM DemoTable708;
+--------------+--------------+ | CustomerName | ShippingDate | +--------------+--------------+ | John | 2019-01-21 | | Chris | 2019-03-24 | | Robert | 2019-04-26 | | David | 2019-07-22 | +--------------+--------------+ 4 rows in set (0.00 sec)
Truy vấn lấy bản ghi từ ngày 2019-04-01 trở đi:
mysql> SELECT * FROM DemoTable708 WHERE ShippingDate >= '2019-04-01';
Kết quả:
+--------------+--------------+ | CustomerName | ShippingDate | +--------------+--------------+ | Robert | 2019-04-26 | | David | 2019-07-22 | +--------------+--------------+ 2 rows in set (0.00 sec)
Các biến thể hữu ích
| Yêu cầu | Cú pháp |
|---|---|
| Sau ngày X (không bao gồm X) | WHERE date_col > '2019-04-01' |
| Từ ngày X đến ngày Y | WHERE date_col BETWEEN '2019-04-01' AND '2019-06-30' |
| Trong 30 ngày gần đây | WHERE date_col >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) |
| Cột DATETIME (chỉ so sánh ngày) | WHERE DATE(datetime_col) >= '2019-04-01' |
| Tháng/năm cụ thể | WHERE YEAR(date_col)=2019 AND MONTH(date_col)=4 |
Lưu ý hiệu suất
- Nên tạo INDEX cho cột ngày thường xuyên lọc
- Tránh dùng hàm trên cột trong WHERE (như
DATE(col)) nếu có thể, vì sẽ làm mất index - Thay vào đó:
WHERE col >= '2019-04-01' AND col < '2019-04-02'cho DATETIME