Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lọc theo tháng khi cột ngày lưu dạng VARCHAR trong MySQL

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 đó.