Giải pháp: STR_TO_DATE()
Hàm STR_TO_DATE(str, format) parse chuỗi theo format chỉ định thành DATE/DATETIME.
Ví dụ minh họa
Tạo bảng
mysql> CREATE TABLE DemoTable (
ShippingDate DATE
);
Chèn với STR_TO_DATE
mysql> INSERT INTO DemoTable VALUES(STR_TO_DATE('06-01-2019', '%m-%d-%Y'));
mysql> INSERT INTO DemoTable VALUES(STR_TO_DATE('01-31-2019', '%m-%d-%Y'));
mysql> INSERT INTO DemoTable VALUES(STR_TO_DATE('02-01-2018', '%m-%d-%Y'));
Kết quả (lưu trữ chuẩn YYYY-MM-DD)
+--------------+
| ShippingDate |
+--------------+
| 2019-06-01 |
| 2019-01-31 |
| 2018-02-01 |
+--------------+
Format Specifiers phổ biến
| Specifier | Ý nghĩa | Ví dụ |
%m | Tháng (01-12) | 01, 12 |
%d | Ngày (01-31) | 01, 31 |
%Y | Năm 4 chữ số | 2019 |
%y | Năm 2 chữ số | 19 |
%H | Giờ 24h (00-23) | 14 |
%h | Giờ 12h (01-12) | 02 |
%i | Phút (00-59) | 30 |
%s | Giây (00-59) | 45 |
%p | AM/PM | PM |
Các định dạng đầu vào thường gặp
| Định dạng input | Format string |
| 06-01-2019 | '%m-%d-%Y' |
| 06/01/2019 | '%m/%d/%Y' |
| 01-31-2019 | '%m-%d-%Y' |
| January 31, 2019 | '%M %d, %Y' |
| 31-Jan-2019 | '%d-%b-%Y' |
| 20190601 | '%Y%m%d' |
Ngược lại: DATE_FORMAT() để xuất
mysql> SELECT DATE_FORMAT(ShippingDate, '%m-%d-%Y') FROM DemoTable;
+-----------------------------------------+
| DATE_FORMAT(ShippingDate, '%m-%d-%Y') |
+-----------------------------------------+
| 06-01-2019 |
| 01-31-2019 |
| 02-01-2018 |
+-----------------------------------------+
Lưu ý quan trọng
- MySQL lưu trữ DATE luôn ở định dạng
YYYY-MM-DD nội bộ
STR_TO_DATE chỉ dùng khi INSERT/UPDATE từ chuỗi
- Sai format → trả về NULL (không báo lỗi)
- Cân nhắc validate/sanitize ở application layer trước khi INSERT