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

MySQL LOAD DATA INFILE导入CSV日期格式转换失败问题求助

问题描述

使用LOAD DATA INFILE导入预定义位置的CSV文件时,其他字段均可正常导入,但日期字段dob始终报错。移除日期字段后导入可成功,且单独使用DATE_FORMAT(STR_TO_DATE(...))语法执行UPDATE操作也能正常转换日期,但将该逻辑放到LOAD DATA INFILE语句中就抛出日期格式错误。

错误执行的SQL语句:

LOAD DATA INFILE '/var/lib/mysql-files/subjects_subject.csv' 
INTO TABLE  subjects_subject 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS  
(id,assigned_id,first_name,last_name,middle_name,dob,MRN,Gender,active,institution_id,dod) 
set dob = DATE_FORMAT(STR_TO_DATE(@dob, '%m/%d/%Y'),'%Y-%m-%d');

错误提示:

ERROR 1292 (22007): Incorrect date value: '10/10/1996' for column 'dob' at row 1

CSV数据示例:

0,TEST00003,Firstname,Lastname,NULL,6/4/2004,#######,F,1,1,NULL
解决方法
  • 问题核心:当前语句的执行顺序错误——先将CSV中的dob原始值直接写入表的dob字段(此时MySQL会按默认日期格式校验,因原始格式不匹配触发报错),之后才执行set进行格式转换,这一步已经晚了。
  • 修正后的SQL语句:把字段列表中的dob替换为用户变量@dob,先将CSV中的日期值暂存到变量里,再通过set转换后赋值给表的dob字段;同时处理dod字段(CSV中为NULL字符串):
LOAD DATA INFILE '/var/lib/mysql-files/subjects_subject.csv' 
INTO TABLE  subjects_subject 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS  
(id,assigned_id,first_name,last_name,middle_name,@dob,MRN,Gender,active,institution_id,@dod) 
set dob = STR_TO_DATE(@dob, '%m/%d/%Y'),
    dod = CASE WHEN @dod IS NOT NULL AND @dod != 'NULL' THEN STR_TO_DATE(@dod, '%m/%d/%Y') ELSE NULL END;
  • 额外说明:
    1. 无需使用DATE_FORMAT,因为STR_TO_DATE返回的已经是MySQL兼容的DATE类型,可直接赋值给日期字段。
    2. 针对dod字段,CSV中是NULL字符串,需要先判断再转换,避免空字符串触发日期格式错误。
    3. 若你的MySQL sql_mode包含NO_ZERO_DATE或STRICT_TRANS_TABLES,需确保转换后的日期为合法有效日期(如避免0000-00-00这类无效值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:22:58