Khi cột ngày là chuỗi (VARCHAR), dùng STR_TO_DATE() chuyển sang DATE, sau đó dùng MONTH() để lọc theo tháng.
Ví dụ minh họa
Tạo bảng:
mysql> CREATE TABLE DemoTable (DueDate VARCHAR(100));
Chèn dữ liệu (định dạng MM-DD-YYYY):
mysql> INSERT INTO DemoTable VALUES('06-19-2019');
mysql> INSERT INTO DemoTable VALUES('01-31-2018');
mysql> INSERT INTO DemoTable VALUES('12-01-2016');
Xem dữ liệu:
mysql> SELECT * FROM DemoTable;
Kết quả
+------------+ | DueDate | +------------+ | 06-19-2019 | | 01-31-2018 | | 12-01-2016 | +------------+
Lọc tháng 6 (tháng 06):
mysql> SELECT * FROM DemoTable
-> WHERE MONTH(STR_TO_DATE(DueDate, '%m-%d-%Y')) = 6;
Kết quả
+------------+ | DueDate | +------------+ | 06-19-2019 | +------------+
Hiệu năng: Hàm trên cột trong WHERE làm mất index. Nên lưu ngày đúng kiểu DATE/DATETIME. Nếu buộc phải dùng VARCHAR, cân nhắc tạo generated column (MySQL 5.7+) lưu giá trị DATE đã parse và index trên cột đó.