MySQL中如何将CSV的'1/1/2020'格式日期正确导入DATE类型列
解决MySQL LOAD DATA导入CSV日期格式转换问题
你的核心问题是LOAD DATA语句中使用了错误的日期格式符,导致CSV里的1/5/2020(月/日/年,无前置零)无法正确转换为MySQL DATE类型,进而出现0000-00-00或空值。
错误原因
你当前的SET bank_date = str_to_date(bank_date,'%Y-%m-%d')写法中,%Y-%m-%d是MySQL标准日期格式的匹配符,但CSV的日期格式是%c/%e/%Y(无前导零的月/无前导零的日/四位年),格式不匹配导致转换失败。此外,直接将CSV字符串导入DATE类型字段时,MySQL会先尝试自动转换,失败后就会存入0000-00-00,后续的SET操作无法修正这个问题。
正确解决方案
使用用户临时变量接收CSV中的原始日期字符串,再通过STR_TO_DATE用正确的格式符转换后赋值给DATE类型字段,全程无需修改原始CSV或创建冗余列:
USE database_name; LOAD DATA LOCAL INFILE 'C:/Users/Shelly/Desktop/Date Import.csv' INTO TABLE bank_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 ROWS (@temp_date, bank_amount) -- 用@temp_date临时存储CSV的日期字符串 SET bank_date = STR_TO_DATE(@temp_date, '%c/%e/%Y'); -- 转换为合法DATE值
格式符说明
%c:匹配无前导零的月份(1-12),对应CSV中的1或12%e:匹配无前导零的日期(1-31),对应CSV中的5或28%Y:匹配四位数字的年份,对应CSV中的2020
这个方法完全符合要求:直接在导入过程完成转换,不修改原始CSV,也不会产生冗余数据。
内容的提问来源于stack exchange,提问作者LaChelle
相关产品推荐
相关产品推荐

