MySQL执行str_to_date函数报错1411:日期格式不匹配求助
问题排查与解决
错误原因
你使用的STR_TO_DATE格式串和实际日期格式不匹配:
- 实际日期值是带横杠分隔的格式:
26-09-2021(日-月-年,横杠分隔) - 但你传入的格式串是
%d%m%Y,这个格式表示无分隔符的日+月+年(比如26092021),函数无法解析带横杠的日期,因此触发1411错误。
解决步骤
1. 修正格式串执行更新
将格式串改为带横杠的%d-%m-%Y,匹配实际日期的分隔符:
UPDATE h1b_data SET RECEIVED_DATE = STR_TO_DATE(RECEIVED_DATE, "%d-%m-%Y");
2. 排查并处理异常数据(推荐)
如果表中存在其他格式的日期值,直接执行更新可能仍会报错。先查询出所有无法用目标格式解析的记录:
SELECT RECEIVED_DATE FROM h1b_data WHERE STR_TO_DATE(RECEIVED_DATE, "%d-%m-%Y") IS NULL;
针对这些异常记录,先统一格式(比如手动修正或用字符串替换处理),再执行更新命令。
3. 安全更新(避免全表报错)
如果不确定所有记录格式是否一致,可以添加过滤条件,只更新能正常解析的记录:
UPDATE h1b_data SET RECEIVED_DATE = STR_TO_DATE(RECEIVED_DATE, "%d-%m-%Y") WHERE STR_TO_DATE(RECEIVED_DATE, "%d-%m-%Y") IS NOT NULL;
内容的提问来源于stack exchange,提问作者Anushri D.
相关产品推荐
相关产品推荐

