mysql str_to_date返回NULL值

时间:2014-11-11 03:30:28

标签: mysql sql null load-data-infile str-to-date

目的

我试图将名为persondata的.csv文件加载到DB alldata TABLE persondata中,然后在其上运行查询以获取firstname,lastname和dateofbirth(dob)。 .csv中只有4条记录 csv中的日期格式为MM / DD / YYYY,输出应为YYYY / MM / DD,YYYY-MM-DD或YYYYMMDD。

SQL

LOAD DATA LOCAL INFILE 'C:/Users/john.smith/Desktop/persondata.csv'
INTO TABLE alldata.persondata
FIELDS TERMINATED BY ','
(firstname, lastname, dob, apptdate, icd9, cpt)
SET dob = str_to_date(@dob, '%c/%e/%Y')
;

SELECT firstname, lastname, dob
FROM alldata.persondata  

问题和错误消息我正在

firstname和lastname返回正确的值,但dob为所有4条记录返回null。在csv文件中,前三个列(A,B,C)是firstname,lastname,dob。与表人员数据中​​的顺序相同。

错误:

  

受影响的4行,8个警告:1265列的数据被截断' dob'在第1行1411日期时间值不正确:' 19850708'对于函数str_to_date 1265

我咨询的帮助页面:

(一般使用str_to_date)
How to convert csv date format to into mysql db
(使用' SET列= str_to_date ...')
MySql load data infile STR_TO_DATE returning blank?
(其他)
How to change string date to MySQL date format at time of import of CSV using MySQL's LOAD DATA LOCAL INFILE
Cannot transform mm/dd/yyyy in excel to csv yyyymmdd date format using SSIS
MySQL str_to_date produces NULL despite valid formatting

附加信息:

我试验了这个查询及其中的一些变体,但没有运气:

SET dob = date_format(str_to_date(@ dob,'%c /%e /%Y'),'%Y /%c /%e')

我没有就如何写这个问题达成很多共识。有些人指定%Y /%d /%m的输出格式,有些人不知道。但是不是mysql支持的唯一日期格式吗?这让我觉得我不应该写它。不确定这是否相关。我已经看到了整个事情的一些语法。我已经阅读了所有支持页面,并且我认为我理解了' SET'命令。

*这是我在stackoverflow上的第一篇文章,所以请告诉我是否应该提出不同的内容

1 个答案:

答案 0 :(得分:0)

您正在使用" dob"你应该在哪里使用" @ dob"在列列表中......第4行应该是:

(firstname, lastname, @dob, apptdate, icd9, cpt)
                      ^^^^

这是因为mysql将日期读入VARIABLE(由@表示),然后后面的SET命令操纵变量以匹配实际列(在没有@的情况下正确识别dob)。

此外,我认为当日期似乎没有斜线时,你会以字符串格式使用斜杠。也就是说,错误表明日期是" 19850708" (1985年7月8日)。我相信你想要:

%Y%m%d

即,将第5行更改为:

SET dob = str_to_date(@dob, '%Y%m%d')

%m和%d是2位数的月份和日期,因为您拥有''而不仅仅是' 7'例如,7月份。在你的评论之后,我不确定哪种日期格式是正确的,但肯定@dob vs dob变量问题是真实的。您可能希望用@original_dob替换@dob的每个实例,以减轻未来的混淆。

请参阅此页:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date