我知道之前已经问过这个问题,但出于某种原因,我仍然没有运气。我正在尝试导入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。任何想法?
答案 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。