You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MySQL表中Varchar类型的时间列转换为Time类型?

解决MySQL中Varchar格式时间转Time类型的问题

问题原因

你的数据中Incident_Time是10:37 A这类格式,而STR_TO_DATE的%p格式符要求匹配完整的AM或PM,单个A/P无法被识别,这就是触发错误和返回NULL的核心原因。另外你第二个查询存在语法错误:多余嵌套了SELECT语句且多了分号,导致逻辑失效。

解决步骤

1. 先验证转换逻辑(避免直接更新出错)

先执行查询确认转换结果是否符合预期:

SELECT 
    Incident_Time,
    STR_TO_DATE(
        REPLACE(REPLACE(Incident_Time, ' A', ' AM'), ' P', ' PM'),
        '%h:%i %p'
    ) AS Time_of_Incident
FROM incident_tab_22;

这段代码先用REPLACE把单个A替换为AM、单个P替换为PM,让格式符合%p的匹配要求,再通过STR_TO_DATE转换为标准时间类型。

2. 更新表中数据为标准时间格式

确认转换结果正确后,执行更新语句:

UPDATE incident_tab_22 
SET Incident_Time = STR_TO_DATE(
    REPLACE(REPLACE(Incident_Time, ' A', ' AM'), ' P', ' PM'),
    '%h:%i %p'
);

3. 修改字段类型为Time

数据更新完成后,修改列的存储类型:

ALTER TABLE incident_tab_22 
MODIFY COLUMN Incident_Time TIME;

额外注意事项

  • 如果数据中存在多空格情况(比如10:37 A),可以调整REPLACE的匹配字符串,或者先用TRIM(Incident_Time)处理首尾空格后再替换。
  • 执行更新操作前建议先备份表数据,防止意外数据丢失。

内容的提问来源于stack exchange,提问作者Lonestar101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:15:42