Vấn đề
Cột VARCHAR lưu ngày sai format (YYYY-DD-MM), cần chuyển thành DATE chuẩn (YYYY-MM-DD).
Giải pháp: STR_TO_DATE()
Tạo bảng:
CREATE TABLE DemoTable630 (ArrivalDate VARCHAR(100));
INSERT INTO DemoTable630 VALUES
('2015-21-01'), ('2018-25-12'), ('2019-15-07'), ('2016-31-03');
Chuyển đổi (format: %Y-%d-%m → Year-Day-Month):
SELECT STR_TO_DATE(ArrivalDate, '%Y-%d-%m') FROM DemoTable630;
Kết quả:
+-------------------------------------+
| str_to_date(ArrivalDate, '%Y-%d-%m') |
+-------------------------------------+
| 2015-01-21 |
| 2018-12-25 |
| 2019-07-15 |
| 2016-03-31 |
+-------------------------------------+
Cập nhật vĩnh viễn (UPDATE)
-- Bước 1: Thêm cột DATE mới
ALTER TABLE DemoTable630 ADD COLUMN ArrivalDateFixed DATE;
-- Bước 2: Update dữ liệu
UPDATE DemoTable630
SET ArrivalDateFixed = STR_TO_DATE(ArrivalDate, '%Y-%d-%m');
-- Bước 3: Verify rồi drop cột cũ, rename cột mới
Các format specifier phổ biến
| Specifier | Ý nghĩa |
|---|---|
| %Y | Năm 4 chữ số |
| %y | Năm 2 chữ số |
| %m | Tháng (00-12) |
| %d | Ngày (00-31) |
| %H | Giờ 24h (00-23) |
| %i | Phút (00-59) |
| %s | Giây (00-59) |
Lưu ý
STR_TO_DATElà ngược củaDATE_FORMAT.- Nếu chuỗi không khớp format → trả về NULL + Warning.
- Luôn backup trước UPDATE hàng loạt.
- Sau khi fix, hãy đổi cột sang kiểu DATE để đảm bảo tính toàn vẹn dữ liệu.