Chuyển chuỗi ngày tháng tùy ý sang DATE/DATETIME trong MySQL
Sử dụng STR_TO_DATE() với format string phù hợp để parse chuỗi ngày không chuẩn thành DATE/DATETIME.
Cú pháp
SELECT STR_TO_DATE(yourDateString, 'format_string') FROM yourTable;
Ví dụ: Định dạng "Tháng Ngày Năm" (April 04 2019)
Tạo bảng (cột VARCHAR):
mysql> CREATE TABLE convertDateDemo (AdmissionDate VARCHAR(200));
Chèn dữ liệu:
mysql> INSERT INTO convertDateDemo VALUES
('April 04 2019'), ('May 05 2018'), ('January 01 2012'), ('June 12 2016');
Dữ liệu gốc:
+-----------------+ | AdmissionDate | +-----------------+ | April 04 2019 | | May 05 2018 | | January 01 2012 | | June 12 2016 | +-----------------+
Chuyển đổi (format: %M %e %Y):
mysql> SELECT STR_TO_DATE(AdmissionDate, '%M %e %Y') AS ConvertDate FROM convertDateDemo;
Kết quả (DATETIME với giờ 00:00:00):
+---------------------+ | ConvertDate | +---------------------+ | 2019-04-04 00:00:00 | | 2018-05-05 00:00:00 | | 2012-01-01 00:00:00 | | 2016-06-12 00:00:00 | +---------------------+
Các format specifier phổ biến
| Specifier | Ý nghĩa | Ví dụ |
|---|---|---|
| %M | Tên tháng đầy đủ | January, April |
| %b | Tên tháng viết tắt | Jan, Apr |
| %m | Tháng 2 chữ số | 01, 04 |
| %d | Ngày 2 chữ số | 04, 12 |
| %e | Ngày (1-2 chữ số, có space) | 4, 12 |
| %Y | Năm 4 chữ số | 2019 |
| %y | Năm 2 chữ số | 19 |
| %H:%i:%s | Giờ:Phút:Giây 24h | 14:30:45 |
| %h:%i:%s %p | Giờ:Phút:Giây 12h AM/PM | 02:30:45 PM |
Ví dụ các định dạng khác
'%d/%m/%Y'→ "31/12/2023"'%Y-%m-%d %H:%i:%s'→ "2023-12-31 23:59:59"'%W, %M %d, %Y'→ "Sunday, December 31, 2023"'%d-%b-%Y'→ "31-Dec-2023"
Lưu ý
- Format string phải khớp chính xác dữ liệu (khoảng trắng, dấu phân cách)
- Trả về NULL nếu parse thất bại
- Dùng
DATE(STR_TO_DATE(...))nếu chỉ cần DATE - MySQL 8.0: Có thể dùng
CAST(... AS DATE)cho một số định dạng chuẩn