MySQL使用STR_TO_DATE时报Truncated incorrect datetime value错误如何解决
MySQL STR_TO_DATE转换含AM/PM的时间字符串报错解决方案
错误原因
你使用的格式串与输入字符串内容不匹配:输入字符串末尾包含12小时制的上午/下午标识PM,但你编写的格式串%m/%d/%Y %h:%i中没有对应的占位符匹配该部分内容,MySQL解析时无法处理多余的PM字符,因此抛出截断错误。
修复方法
在格式串末尾添加%p占位符匹配AM/PM标识即可,修正后的SQL语句如下:
update userdata set validity_start_date=STR_TO_DATE('10/29/2015 2:12 PM','%m/%d/%Y %h:%i %p');
注意事项
- 若你的MySQL运行环境
lc_time_names变量为非英文区域配置,会无法识别英文的AM/PM标识,可先执行会话级配置修改再跑更新语句:SET lc_time_names = 'en_US';,更新完成后可自行恢复原有配置。 %p搭配%h(12小时制小时占位符)使用时,MySQL会自动将PM时段的时间转换为24小时制的数值存储,比如示例中的2:12 PM会正确转换为14:12,无需手动换算。- 批量更新数据前,建议先执行查询语句验证转换结果是否符合预期,避免数据写入错误:
SELECT STR_TO_DATE(你的时间字段名,'%m/%d/%Y %h:%i %p') AS convert_result FROM userdata LIMIT 10;
内容的提问来源于stack exchange,提问作者sfgroups
相关产品推荐
相关产品推荐

