1

我正在从 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) 以捕获正在发生的任何事情,但最终,我想捕获 ymd H:i:s (不确定 STR_TO_DATE 是否可以做到这一点?)

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

所以,我的问题是:

  1. 为什么我需要 @ 符号才能使用此功能?
  2. 数据格式('%c/%e/%Y')应该是输入数据的格式还是我想要的输出格式?
  3. 我也可以这样记录时间吗?

对不起这个大帖子!

现在回到谷歌...

4

2 回答 2

2

为什么我需要 @ 符号才能使用此功能?

@ 符号表示您正在使用变量,因此读取的字符串不会立即放入表中,而是放入内存中,让您在插入之前对其进行操作。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');
于 2012-07-28T01:47:21.607 回答
0

我有这个问题。为我解决的问题是确保我在加载文件中考虑了不是分隔符的空格。所以如果 ',' 是分隔符:

...,2012 年 4 月 29 日,...

可能被解释为“2012 年 4 月 29 日”

所以应该是......,2012 年 4 月 29 日,......

于 2013-09-27T17:45:07.147 回答