我正在使用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')
答案 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)
稍微冗长的过程可以为您提供一些测试灵活性:
运行类似
的查询更新mytable SET mydate = STR_TO_DATE(mydate_text,'%Y-%b-%d')
如果一切正常,请删除mydate_text列
这种技术的优势在于它让您可以使用格式来解决这些格式,而无需使用有点繁琐的MySQL LOAD DATA语法重新导入表格,尤其是长度表列。如果您确切知道自己在做什么,那么上面的答案是最好的。如果您不是MySQL的专家,这种技术可能会有所帮助,直到您的格式完全正确。