0

我知道以前有人问过这个问题,但由于某种原因,我的运气仍然为零。我正在尝试导入 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。有任何想法吗?

4

2 回答 2

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')然后 DROP varchar 列。

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

希望这可以帮助...

于 2012-07-20T04:21:39.357 回答
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文档

于 2012-07-20T05:46:47.617 回答