Khi cột lưu thời gian dạng chuỗi 4 chữ số HHMM (ví dụ: '1620' = 16:20), dùng SUBSTRING tách giờ/phút, CONCAT thêm dấu :, sau đó TIME_FORMAT định dạng.
Ví dụ minh họa
Tạo bảng:
CREATE TABLE DemoTable1591 (ArrivalTime VARCHAR(20));
INSERT INTO DemoTable1591 VALUES ('1620'), ('2345'), ('2210');
Chuyển đổi:
SELECT TIME_FORMAT(
CONCAT(SUBSTRING(ArrivalTime, 1, 2), ':', SUBSTRING(ArrivalTime, 3, 4)),
'%H:%i'
) AS RealTime
FROM DemoTable1591;
Kết quả
| ArrivalTime (gốc) | RealTime |
|---|---|
| 1620 | 16:20 |
| 2345 | 23:45 |
| 2210 | 22:10 |
Giải thích
SUBSTRING(ArrivalTime, 1, 2): 2 ký tự đầu = giờ (16, 23, 22).SUBSTRING(ArrivalTime, 3, 4): 2 ký tự tiếp = phút (20, 45, 10).CONCAT(..., ':', ...): Ghép thành'16:20'.TIME_FORMAT(..., '%H:%i'): Định dạng thành TIME (24h). Dùng%h:%icho 12h AM/PM.
Cách đơn giản hơn: STR_TO_DATE
SELECT STR_TO_DATE(ArrivalTime, '%H%i') AS RealTime FROM DemoTable1591;
%H%i khớp trực tiếp format HHMM → trả về kiểu TIME.
Cách hiện đại nhất (MySQL 8.0+): CAST với format
SELECT CAST(CONCAT(SUBSTRING(ArrivalTime,1,2), ':', SUBSTRING(ArrivalTime,3,2)) AS TIME) AS RealTime FROM DemoTable1591;
⚠️ Lưu ý
- Dữ liệu đầu vào phải chuẩn (đúng 4 chữ số, giờ 00-23, phút 00-59). Dữ liệu bẩn sẽ trả về NULL hoặc sai.
- Nên lưu cột kiểu
TIMEhoặcDATETIMEthay vì VARCHAR. - Nếu đã lưu VARCHAR, cân nhắc
ALTER TABLE ... MODIFY ArrivalTime TIMEsau khi clean data.