如何在MySQL一次性将日期列导入varchar和date两个字段?
解决MySQL LOAD DATA一次性导入日期到双列的问题
我每周通过MySQL Workbench从CSV文件导入销售数据,其中一列日期格式为1/5/2023。我希望将该日期同时导入两个列:
- 列名为
Date(varchar类型),需保留原格式1/5/2023; - 列名为
sql_date(date类型),需转换为2023-01-05格式。
请问如何无需后续执行UPDATE/SET/WHERE语句,一次性完成干净导入?
我尝试了以下代码,但结果为空,是否可以通过这种方式实现?
LOAD DATA LOCAL INFILE 'C:/Users/Lachelle Kazda/Desktop/Date Import Test.csv' INTO TABLE sales_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 ROWS (@Date, sales_amt, sales_qty) SET sql_date = STR_TO_Date(@Date,'%c/%e/%Y') AND @Date = Date
注:原表列结构为(Date, sales_amt, sales_qty, sql_date)
你的代码问题出在SET子句的语法上:用AND连接两个赋值操作是错误的,MySQL的SET子句中多个字段赋值需要用逗号分隔。修正后即可实现一次性导入需求,无需后续更新:
LOAD DATA LOCAL INFILE 'C:/Users/Lachelle Kazda/Desktop/Date Import Test.csv' INTO TABLE sales_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 ROWS (@Date, sales_amt, sales_qty) SET Date = @Date, sql_date = STR_TO_DATE(@Date, '%c/%e/%Y');
关键说明:
- 变量接收与赋值:用用户变量
@Date接收CSV中的原始日期值,直接赋值给varchar类型的Date列,保留原格式。 - 日期转换:通过
STR_TO_DATE(@Date, '%c/%e/%Y')将原始日期转换为MySQL标准date格式,其中:%c:不带前导零的月份(如1、12)%e:不带前导零的日期(如5、28)%Y:四位年份(如2023)
- 语法修正:
SET子句中用逗号分隔两个字段的赋值操作,替换原代码中的AND即可解决导入为空的问题。
另外需确保MySQL Workbench已开启本地文件导入权限(可在连接配置的“Advanced”选项中设置local-infile=1)。
内容的提问来源于stack exchange,提问作者LaChelle
相关产品推荐
相关产品推荐

