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

MySQL导入CSV遇[1411]错误:STR_TO_DATE传入空日期值

解决STR_TO_DATE处理空值报错的问题

错误原因是CSV中存在空的日期字段(值为''),而STR_TO_DATE函数无法将空字符串转换为有效的日期类型,触发了1411错误。可以通过以下方式修复:

1. 直接处理空值,转换为NULL

修改SET子句中的DateAdded赋值逻辑,先判断日期变量是否为空,为空则设为NULL(前提是表中DateAdded字段允许NULL):

SET shows.ShowID =@ShowID ,
shows.TypeID = (select TypeID from typecountry t where t.`Type`=@type1 and t.Country=@country),
shows.DateAdded= STR_TO_DATE(IF(@date_added = '', NULL, @date_added), '%e-%b-%y');

2. 若DateAdded不允许NULL,设置默认值

如果DateAdded字段定义为NOT NULL,可以给空值设置一个合法的默认日期(比如'0000-00-00'或当前日期),示例:

shows.DateAdded= STR_TO_DATE(IF(@date_added = '', '01-Jan-00', @date_added), '%e-%b-%y');

注意:如果使用'0000-00-00',需要确保MySQL的sql_mode未启用NO_ZERO_DATE和NO_ZERO_IN_DATE,否则会触发新的错误。

3. 排查CSV中的异常数据

如果除了空值还有其他格式错误的日期值,可以先将数据导入临时表,筛选出不符合格式的行进行修正:

-- 创建临时表
CREATE TEMPORARY TABLE temp_shows LIKE shows;
-- 导入所有数据(不处理日期转换)
LOAD DATA INFILE 'your_file.csv'
INTO TABLE temp_shows
FIELDS TERMINATED BY ',' 
optionally enclosed by '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS;
-- 筛选出DateAdded为空或格式错误的行
SELECT * FROM temp_shows WHERE DateAdded = '' OR STR_TO_DATE(DateAdded, '%e-%b-%y') IS NULL;

修正这些异常数据后,再正式导入到目标表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:50:23