我知道以前有人问过这个问题,但出于某种原因,我仍然一无所获。我正在尝试导入CSV文件并将日期字段转换为正确的mysql格式(YYYY-MM-DD)。我应该注意到,csv中的一些记录的日期值为空值'‘。不确定这是否意味着什么。我还应该提到,我在这个表中已经有了recordd。它不是空的。我试着运行这个程序,但是没有成功。
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返回值。有什么想法吗?
发布于 2012-07-20 12:21:39
如果只执行一次此操作,并且表是空的,则可以运行导入,但首先修改表,使date列的类型为VARCHAR。然后运行UPDATE table SET date = str_to_date( date, '%m/%d/%Y'),并将列转换回DATETIME或DATE。
您也可以添加第二个date列,格式为DATE,以VARCHAR格式导入到第一个date列中,然后运行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)‘。
希望这能帮到你。
发布于 2012-07-20 13:46:48
这可能是正确的-
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。
https://stackoverflow.com/questions/11572797
复制相似问题