Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Chuyển đổi định dạng ngày VARCHAR sang DATE trong MySQL với STR_TO_DATE


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 inputPattern 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.