MySQL日期类型转换报错(ERROR 1411):varchar转date失败求助
解决MySQL str_to_date转换报错1411的问题
这个错误的核心原因是你的orderdate字段中存在不符合%m/%d/%y格式的脏数据,比如错误信息里提到的'Order'字符串(大概率是导入数据时误把表头当成了数据行)。按以下步骤处理:
1. 定位脏数据
先查询出所有无法通过str_to_date转换的记录,确认异常值:
SELECT orderdate FROM january_2019 WHERE str_to_date(orderdate, '%m/%d/%y') IS NULL;
2. 清理/修复脏数据
根据查询结果处理异常值:
- 如果是表头类的无效值(比如
'Order'),直接删除对应行:DELETE FROM january_2019 WHERE orderdate = 'Order'; - 如果是其他格式错误的值,可选择更新为
NULL或合法默认日期:UPDATE january_2019 SET orderdate = NULL WHERE str_to_date(orderdate, '%m/%d/%y') IS NULL;
3. 安全执行字段转换
为避免直接修改原字段导致数据风险,推荐先新增date类型字段完成转换,再替换原字段:
- 添加新的date类型字段:
ALTER TABLE january_2019 ADD COLUMN order_date DATE; - 将原字段的有效日期数据转换到新字段:
UPDATE january_2019 SET order_date = str_to_date(orderdate, '%m/%d/%y'); - 确认数据无误后,删除原字段并重命名新字段:
ALTER TABLE january_2019 DROP COLUMN orderdate; ALTER TABLE january_2019 CHANGE COLUMN order_date orderdate DATE;
如果不需要保留原字段,也可以在清理脏数据后直接执行你最初的更新语句,再修改字段类型:
UPDATE january_2019 SET orderdate = str_to_date(orderdate,'%m/%d/%y'); ALTER TABLE january_2019 MODIFY COLUMN orderdate DATE;
内容的提问来源于stack exchange,提问作者Diajeng Wilutama
相关产品推荐
相关产品推荐

