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

Chuyển đổi chuỗi thời gian VARCHAR (HHMM) sang TIME thật trong MySQL

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
162016:20
234523:45
221022: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:%i cho 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 TIME hoặc DATETIME thay vì VARCHAR.
  • Nếu đã lưu VARCHAR, cân nhắc ALTER TABLE ... MODIFY ArrivalTime TIME sau khi clean data.