Khi cột lưu ngày tháng dưới dạng chuỗi với dấu chấm phân cách (VD: '01.10.2019', '31.12.2018'), hàm STR_TO_DATE() cho phép chuyển đổi sang kiểu DATE chuẩn bằng cách chỉ định định dạng mẫu (format specifier).
Ví dụ minh họa
Tạo bảng cột VARCHAR:
mysql> CREATE TABLE DemoTable1445 (
AdmissionDate VARCHAR(20)
);
Chèn dữ liệu định dạng dd.mm.yyyy:
mysql> INSERT INTO DemoTable1445 VALUES ('01.10.2019');
mysql> INSERT INTO DemoTable1445 VALUES ('31.12.2018');
mysql> INSERT INTO DemoTable1445 VALUES ('01.02.2017');
Dữ liệu gốc:
mysql> SELECT * FROM DemoTable1445;
+---------------+ | AdmissionDate | +---------------+ | 01.10.2019 | | 31.12.2018 | | 01.02.2017 | +---------------+
Chuyển đổi sang DATE với STR_TO_DATE
mysql> UPDATE DemoTable1445
SET AdmissionDate = STR_TO_DATE(AdmissionDate, '%d.%m.%Y');
Kết quả (cột vẫn là VARCHAR nhưng giá trị đã thành DATE chuẩn):
mysql> SELECT * FROM DemoTable1445;
+---------------+ | AdmissionDate | +---------------+ | 2019-10-01 | | 2018-12-31 | | 2017-02-01 | +---------------+
Giải thích định dạng '%d.%m.%Y'
| Ký hiệu | Ý nghĩa | Ví dụ |
|---|---|---|
%d | Ngày (01-31) | 01, 31 |
. | Ký tự dấu chấm chữ diện | . |
%m | Tháng 2 chữ số (01-12) | 02, 10, 12 |
%Y | Năm 4 chữ số | 2019, 2024 |
Lưu ý: Định dạng trong STR_TO_DATE phải khớp chính xác với dữ liệu (kể cả ký tự phân cách). Nếu dữ liệu có thể là '1.1.2019' (không padding 0), dùng '%e.%c.%Y' (%e ngày 1-2 chữ số, %c tháng 1-2 chữ số).
Các định dạng ngày thường gặp
| Dữ liệu gốc | Format STR_TO_DATE |
|---|---|
| 2019-10-01 | '%Y-%m-%d' |
| 01/10/2019 | '%d/%m/%Y' |
| 01-10-2019 | '%d-%m-%Y' |
| Oct 1, 2019 | '%b %e, %Y' |
| October 1, 2019 | '%M %e, %Y' |
| 01.10.2019 14:30 | '%d.%m.%Y %H:%i' |
Khuyến nghị tốt nhất
Sau khi chuyển đổi, hãy thay đổi kiểu cột sang DATE để đảm bảo toàn vẹn dữ liệu và hiệu năng:
ALTER TABLE DemoTable1445 MODIFY AdmissionDate DATE;