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

时间:2010-02-10 16:46:57

标签: sql mysql 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)

CSV中第三列映射到dateOfBirth字段的日期格式如下:

14-Feb-10

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

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

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

2 个答案:

答案 0 :(得分:24)

您需要使用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')

在页面下方查看示例:http://mysql2.mirrors-r-us.net/doc/refman/5.1/en/load-data.html(不确定为什么此页面似乎与主要文档不同,因为它实际上包含SET用法的示例。)

答案 1 :(得分:5)

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

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

    的查询

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

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

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

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