如何在MySQL中以HH:MM格式导入时间?

时间:2017-11-02 05:44:25

标签: mysql

我有一个数据集如下,

Date,Time,ID,Name,Count

01-MAY-2009,00:00,4,Town Hall (West),209

01-MAY-2009,02:00,17,Collins Place (South),28

01-MAY-2009,23:00,18,Collins Place (North),36

为此,我创建了具有以下模式的表,

CREATE TABLE table_name(date DATE, time TIME, id int, name VARCHAR(50), count int);

从" .csv"加载表格档案为,

LOAD DATA INFILE '/home/cloudera/dataset.csv' 
INTO TABLE table_name
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
(@var1, @var2, id, name, count) 
SET date = STR_TO_DATE(@var1, '%d-%b-%Y') 
SET time = TIME(@var2, "%H:%i");

但是我收到了错误,

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET time = TIME(@var2, "%H:%i")' at line 1

我无法理解错误是什么。我试过浏览MySQL网站和文档,但无法弄清楚正确的格式是什么。任何人都可以取悦我。提前谢谢。

2 个答案:

答案 0 :(得分:1)

我不认为你甚至需要在这里使用TIME功能。你当前的hour:minute字符串时间文字应该足够好了,q.v。 documentation

  

小心将缩写值分配给TIME列。 MySQL用冒号解释缩写的TIME值作为一天中的时间。也就是说,' 11:12'意思是' 11:12:00',而不是' 11:12'

作为有效文字,您的时间将被解释为具有零秒组件。所以,如果您只是按原样插入这些时间字符串,我认为它应该可行。请尝试以下代码:

LOAD DATA INFILE '/home/cloudera/dataset.csv' 
INTO TABLE table_name
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
(@var1, Time, id, name, count) 
SET date = STR_TO_DATE(@var1, '%d-%b-%Y');

答案 1 :(得分:0)

Tim正确指出您不需要在load data infile声明中转换您的时间数据。

只是为了回答为什么会出现语法错误:load data infile只能有一个set子句,其中多个列的分配用逗号分隔。您的代码有多个set子句,因此失败。

此外,time()函数没有模式的第二个参数。您需要使用的功能称为design of accordion with pdf links and images

所以,它应该如下所示:

...
SET date = STR_TO_DATE(@var1, '%d-%b-%Y'), time = TIME(str_to_date(@var2, "%H:%i"));