MySQL中使用str_to_date遇1292截断警告的问题咨询
解决MySQL STR_TO_DATE转换时的1292截断警告
问题原因
你的reportdate字段值末尾带有时区后缀+00,但使用的格式串%Y/%m/%d %H:%i:%s仅匹配到时间部分,无法覆盖时区后缀,MySQL会自动截断这部分不匹配的内容,从而触发1292警告。
解决方案
方案1:匹配完整字符串格式
修改STR_TO_DATE的格式串,加入时区匹配符%z,完整匹配带时区的字符串:
SELECT reportdate, STR_TO_DATE(reportdate,'%Y/%m/%d %H:%i:%s%z') AS date FROM dc_crash_data_tst LIMIT 5;
如果需要更新表字段(假设目标字段为datetime_column),可执行:
UPDATE dc_crash_data_tst SET datetime_column = STR_TO_DATE(reportdate,'%Y/%m/%d %H:%i:%s%z');
方案2:先截取有效时间部分
如果不需要时区信息,先用LEFT函数截取字符串的前19位(即YYYY/MM/DD HH:MM:SS部分),再进行转换:
SELECT reportdate, STR_TO_DATE(LEFT(reportdate, 19),'%Y/%m/%d %H:%i:%s') AS date FROM dc_crash_data_tst LIMIT 5;
对应的更新语句:
UPDATE dc_crash_data_tst SET datetime_column = STR_TO_DATE(LEFT(reportdate, 19),'%Y/%m/%d %H:%i:%s');
效果验证
执行修正后的语句后,不会再出现1292截断警告,转换结果保持正确,同时可正常执行后续表更新操作。
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

