2012-07-20 116 views
0

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

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返回所有的人。有任何想法吗?

回答

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

这可能是正确─

​​

你为什么要采取@date_date而不是@date?我认为你得到这个,因为这被认为是不完整的值,所以返回NULL。请参阅MySQL docs