MySql加载数据infile STR_TO_DATE返回空白?

时间:2012-07-27 23:36:36

标签: mysql csv

我正在从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是否可以这样做?)

我也不确定为什么我需要@符号..谷歌在那里让我失望。

所以,我的问题是:

  1. 为什么我需要@符号才能使用此功能?
  2. 数据格式('%c /%e /%Y')应该是输入数据的格式还是我想要的输出?
  3. 我也能以这种方式捕捉时间吗?
  4. 抱歉这个大帖子!

    现在回到Google ......

2 个答案:

答案 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日,...