将CSV导入MySQL并转换日期

时间:2012-07-20 04:13:14

标签: mysql csv

我知道之前已经问过这个问题,但出于某种原因,我仍然没有运气。我正在尝试导入CSV文件并将日期字段转换为正确的mysql格式(YYYY-MM-DD)。我应该注意到csv中的一些记录对于日期值有一个空值''。不确定这是否意味着什么。我还应该提一下,我已经在这张表中记录过了。它不是空的。我试过跑这个但没有运气

load data local infile '/Users/Path/To/CSV/file.csv' 
into table donor fields terminated by ',' 
lines terminated by '\n' (@date,INSTRUCTIONS)
set date = STR_TO_DATE(@date, '%Y-%m-%d')

我为所有人返回NULL。任何想法?

2 个答案:

答案 0 :(得分:1)

如果您只执行一次此操作,并且表空为启动,则可以运行导入但首先更改表,以使日期列的类型为VARCHAR。然后运行UPDATE table SET date = str_to_date( date, '%m/%d/%Y'),并将列转换回DATETIME或DATE。

您也可以添加格式为DATE的第二个日期列,以VARCHAR格式导入第一个日期列,然后运行UPDATE table SET date2 = str_to_date( date1, '%m/%d/%Y'),然后删除varchar列。

重要的是要注意STR_TO_DATE()的第二个参数是输入格式,而不是结果格式。所以在你的第二个参数中,你指示MySQL,CSV中的日期格式是Y-m-d。如果它实际上是m / d / Y,你应该使用`STR_TO_DATE(@date_date,'%m /%d /%Y)'。

希望这会有所帮助......

答案 1 :(得分:1)

这可能是正确的 -

LOAD DATA LOCAL INFILE '/Users/Path/To/CSV/file.csv'  
INTO TABLE tbl1 FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(@date,INSTRUCTIONS)
SET date = STR_TO_DATE(@date,'%Y/%m/%d);

为什么选择@date_date代替@date?我认为你得到这个,因为这被视为不完整的值,因此返回NULL。请参阅MySQL docs