Chuyển đổi định dạng ngày UK (dd/mm/yyyy) sang MySQL DATE
Định dạng UK: Ngày/Tháng/Năm (ví dụ: 31/01/2016). MySQL chuẩn lưu YYYY-MM-DD. Dùng STR_TO_DATE() với pattern '%d/%m/%Y' để chuyển đổi.
Cú pháp
STR_TO_DATE(ten_cot, '%d/%m/%Y')
Ví dụ minh họa
Tạo bảng DemoTable728:
mysql> CREATE TABLE DemoTable728 (DueDate VARCHAR(100)); Query OK, 0 rows affected (0.59 sec)
Chèn dữ liệu (định dạng UK):
mysql> INSERT INTO DemoTable728 VALUES('10/11/2019');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable728 VALUES('31/01/2016');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable728 VALUES('01/12/2015');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable728 VALUES('11/03/2018');
Query OK, 1 row affected (0.16 sec)
Xem dữ liệu gốc:
mysql> SELECT * FROM DemoTable728;
+------------+ | DueDate | +------------+ | 10/11/2019 | | 31/01/2016 | | 01/12/2015 | | 11/03/2018 | +------------+ 4 rows in set (0.00 sec)
Chuyển đổi sang DATE chuẩn MySQL (YYYY-MM-DD):
mysql> SELECT STR_TO_DATE(DueDate, '%d/%m/%Y') FROM DemoTable728;
Kết quả:
+---------------------------------+ | STR_TO_DATE(DueDate, '%d/%m/%Y') | +---------------------------------+ | 2019-11-10 | | 2016-01-31 | | 2015-12-01 | | 2018-03-11 | +---------------------------------+ 4 rows in set (0.00 sec)
Giải thích Pattern '%d/%m/%Y'
| Ký tự | Ý nghĩa | Ví dụ input |
|---|---|---|
%d | Ngày (01-31, có đệm 0) | 10, 31, 01, 11 |
/ | Ký tự phân cách cố định | / |
%m | Tháng (01-12, có đệm 0) | 11, 01, 12, 03 |
/ | Ký tự phân cách cố định | / |
%Y | Năm 4 chữ số | 2019, 2016, 2015, 2018 |
Các định dạng quốc tế phổ biến
| Quốc gia/Vùng | Định dạng | Pattern STR_TO_DATE |
|---|---|---|
| UK, VN, AU, EU | dd/mm/yyyy | '%d/%m/%Y' |
| US | mm/dd/yyyy | '%m/%d/%Y' |
| ISO/Chuẩn quốc tế | yyyy-mm-dd | '%Y-%m-%d' |
| Định dạng có dấu chấm | dd.mm.yyyy | '%d.%m.%Y' |
| Có giờ (24h) | dd/mm/yyyy HH:MM:SS | '%d/%m/%Y %H:%i:%s' |
Ứng dụng: Chuyển đổi vĩnh viễn cột VARCHAR sang DATE
-- 1. Thêm cột DATE mới ALTER TABLE DemoTable728 ADD COLUMN DueDateParsed DATE; -- 2. Cập nhật dữ liệu UPDATE DemoTable728 SET DueDateParsed = STR_TO_DATE(DueDate, '%d/%m/%Y'); -- 3. (Tùy chọn) Xóa cột VARCHAR cũ, đổi tên cột mới -- ALTER TABLE DemoTable728 DROP COLUMN DueDate, CHANGE DueDateParsed DueDate DATE;