17

我正在使用 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')

4

2 回答 2

26

您需要使用该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使用示例。)

于 2010-02-10T17:52:13.043 回答
5

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

  • 使用名为例如的 VARCHAR(64) 列。mydate_text 保存您导入的未格式化日期。
  • 加载/导入将日期放入此纯文本字段的表格
  • 运行查询

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

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

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

这种技术的优点是它可以让您使用这些格式,而不必使用有点繁琐的 MySQL LOAD DATA 语法重新导入表,尤其是对于长度表列。如果您确切地知道自己在做什么,那么上面的答案是最好的。如果您不是 MySQL 专家,那么在您完全正确地获得格式之前,这种技术会很有帮助。

于 2011-09-19T13:16:43.273 回答