Vấn đề
Ngày tháng lưu dưới dạng VARCHAR (chuỗi) như '12/01/2019' (MM/DD/YYYY) cần chuyển sang kiểu DATE chuẩn 'YYYY-MM-DD' để so sánh, sắp xếp, tính toán đúng.
Giải pháp: UPDATE với STR_TO_DATE
UPDATE your_table SET date_col = STR_TO_DATE(date_col, '%m/%d/%Y');
Ví dụ minh họa
Tạo bảng và chèn dữ liệu MM/DD/YYYY
mysql> CREATE TABLE DemoTable (
DueDate VARCHAR(100)
);
mysql> INSERT INTO DemoTable VALUES
('12/01/2019'), ('01/31/2016'), ('03/17/2018'), ('07/25/2017');
Xem dữ liệu trước
mysql> SELECT * FROM DemoTable;
+------------+ | DueDate | +------------+ | 12/01/2019 | | 01/31/2016 | | 03/17/2018 | | 07/25/2017 | +------------+
Cập nhật chuyển đổi
mysql> UPDATE DemoTable SET DueDate = STR_TO_DATE(DueDate, '%m/%d/%Y');
Query OK, 4 rows affected (0.18 sec) Rows matched: 4 Changed: 4 Warnings: 0
Kết quả sau (kiểu DATE hiển thị YYYY-MM-DD)
mysql> SELECT * FROM DemoTable;
+------------+ | DueDate | +------------+ | 2019-12-01 | | 2016-01-31 | | 2018-03-17 | | 2017-07-25 | +------------+
Các định dạng phổ biến
| Định dạng input | Pattern STR_TO_DATE |
|---|---|
| DD/MM/YYYY | '%d/%m/%Y' |
| MM/DD/YYYY | '%m/%d/%Y' |
| YYYY-MM-DD | '%Y-%m-%d' |
| DD-MM-YYYY | '%d-%m-%Y' |
| Month DD, YYYY | '%M %d, %Y' |
⚠️ Lưu ý quan trọng
- Cột DueDate ở ví dụ vẫn là VARCHAR. Sau UPDATE, MySQL tự chuyển chuỗi kết quả sang DATE khi lưu? **Không!** Cột vẫn VARCHAR, chỉ giá trị chuỗi thay đổi thành 'YYYY-MM-DD'.
- Nên ALTER TABLE đổi kiểu cột sang DATE:
ALTER TABLE DemoTable MODIFY DueDate DATE;
- Dữ liệu không hợp lệ (như '31/02/2019') sẽ thành NULL và có Warning.