如何将CSV数据导入MySQL并得到24小时制TIME类型数据
解决CSV中12小时制单字母标识时间导入MySQL为24小时制TIME类型的问题
问题原因分析
你之前的尝试失败核心有两点:
- 使用
STR_TO_DATE时误用%H(24小时制小时格式符),但源数据是12小时制,应使用%h/%I; - 源数据的AM/PM是单个字母
A/P,而%p格式符仅匹配完整的AM/PM字符串,导致匹配失败返回NULL。
正确解决步骤
1. 先导入为VARCHAR类型
不要直接导入为TIME类型,先将Issue_Time列设为VARCHAR(255)完成数据导入,保留原始的07:30A/01:35P格式数据。
2. 转换为24小时制时间
执行以下UPDATE语句,先补全单个字母的AM/PM标识,再用STR_TO_DATE解析为24小时制时间:
UPDATE my_table SET Issue_Time = STR_TO_DATE( CONCAT( SUBSTRING(Issue_Time, 1, 5), CASE RIGHT(Issue_Time, 1) WHEN 'A' THEN 'AM' WHEN 'P' THEN 'PM' END ), '%h:%i%p' );
3. (可选)规范列类型
转换完成后,将列类型改为TIME以统一存储格式:
ALTER TABLE my_table MODIFY COLUMN Issue_Time TIME;
验证结果
执行后数据会被正确转换:
07:30A→07:30:0001:35P→13:35:00
内容的提问来源于stack exchange,提问作者Lonestar101
相关产品推荐
相关产品推荐

