我正在从csv文件中将1m +记录导入到我的表中。 使用load data local infile方法可以很好地工作。
但是,日期都是不同的格式。 一个快速的谷歌引导我到这个功能:
STR_TO_DATE
然而,当我实现它时,我什么都没得到,一个空的插入。这是我的SQ减少到包括一个日期(我有4个相同的问题)和通用列名称:
load data local infile 'myfile.csv' into table `mytable`
fields terminated by '\t'
lines terminated by '\n'
IGNORE 1 LINES
( `column name 1`
, `my second column`
, @temp_date
, `final column`)
SET `Get Date` = STR_TO_DATE(@temp_date, '%c/%e/%Y')
如果我这样做:
SET `Get Date` = @temp_date
csv中的日期以其在文件中的格式捕获。 但是当我尝试第一种方法时,我的表列是空的。我已经将列类型从时间戳更改为varchar(255)以捕获任何内容,但最后,我想捕获y-m-d H:i:s(不确定STR_TO_DATE是否可以这样做?)
我也不确定为什么我需要@符号..谷歌在那里让我失望。
所以,我的问题是:
抱歉这个大帖子!
现在回到Google ......
答案 0 :(得分:1)
为什么我需要@符号才能使用此功能?
@符号表示您正在使用变量,因此读取字符串不会立即放入表中,而是放入内存中,使您可以在插入之前对其进行操作。 http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
中的更多信息数据格式('%c /%e /%Y')应该是输入数据的格式还是我想要的输出?
其输入数据的格式,http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date
中的更多信息我也能以这种方式捕捉时间吗?
只要您选择了正确的格式,就应该能够像
那样STR_TO_DATE(@temp_date,'%c/%e/%Y %h:%i:%s');
答案 1 :(得分:0)
我有这个问题。为我解决的是确保我在加载文件中考虑了不是分隔符的空格。所以如果','是分隔符:
...,2012年4月29日,......
可能被解释为“4/29/2012”
应该如此 ...,2012年4月29日,...