如何使用MySQL的LOAD DATA LOCAL INFILE在导入CSV时将字符串日期更改为MySQL日期格式

Cam*_*oft 17 mysql sql datetime load-data-infile

我正在使用MySQL的LOAD DATA LOCAL INFILE SQL语句将CSV文件中的数据加载到现有数据库表中.

这是一个示例SQL语句:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(name, address, dateOfBirth)
Run Code Online (Sandbox Code Playgroud)

CSV中映射到dateOfBirth字段的第三列当前具有以下格式的日期:

14-Feb-10
Run Code Online (Sandbox Code Playgroud)

如何修改上面的SQL语句以将日期格式化为MySQL的日期格式,即2010-02-14

我知道如何使用常规INSERT语法转换字符串日期:

STR_TO_DATE('14-Feb-10', '%d-%b-%y')

Ali*_* R. 25

您需要使用该SET子句以及一个变量来引用该列中行的内容.在列列表中,将日期列分配给变量名称.然后,您可以在SET声明中使用它.(注意,我没有在我面前测试MySQL.)

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(name, address, @var1)
set dateOfBirth = STR_TO_DATE(@var1, '%d-%b-%y')
Run Code Online (Sandbox Code Playgroud)

请参阅以下页面中的示例:http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/load-data.html(不确定为什么此页面似乎与主要文档不同它实际上包含一个SET使用示例.)

  • @Everyone谢谢.实际上,根据问题中给出的例子,对于缩写的月份名称,它看起来应该是`%b`. (2认同)

Pet*_*217 5

一个稍微冗长的过程,为您提供一些测试灵活性:

  • 使用调用的VARCHAR(64)列,例如.mydate_text用于保存导入的未格式化日期.
  • 加载/导入表格,将日期放入此纯文本字段
  • 像这样运行查询

    更新mytable SET mydate = STR_TO_DATE(mydate_text,'%Y-%b-%d')

  • 如果一切正常,请删除mydate_text列

  • 如果不行,只需再次使用新格式.

这种技术的优点是它可以让你使用格式,而不必使用有点繁琐的MySQL LOAD DATA语法重新导入表,特别是长度表列.如果您确切知道自己在做什么,那么上面的答案是最好的.如果您不是MySQL的专家,这种技术可能会有所帮助,直到您的格式完全正确.