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

如何在MySQL中以HH:MM格式导入时间?,mysql,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 VAR

我有一个如下的数据集

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”文件加载表格,如下所示:

但我得到了一个错误

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的网站和文档,但不知道正确的格式是什么。有谁能取悦我吗。提前谢谢。

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

为时间列指定缩写值时要小心。MySQL将带有冒号的缩写时间值解释为一天中的时间。也就是说,“11:12”的意思是“11:12:00”,而不是“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');

Tim正确地指出,您不需要在
load data infle
语句中转换时间数据

为了回答出现语法错误的原因:
load data infle
只能有一个
set
子句,其中对多列的赋值用逗号分隔。您的代码有多个
set
子句,因此失败

另外,
time()
函数没有模式的第二个参数。您需要使用的函数被调用

因此,它应该如下所示:

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

有没有办法让MySQL以HH:MM格式解释时间值?@JohnDeer
HH:MM
是时间字符串已经被解释的格式(我认为)。那么,MySQL不会在时间中添加“秒”字吗?我认为需要一个秒组件。如果您不想看到秒数,那么您可以使用一个字符串函数将其从输出中删除。@johnder顺便说一句,您的初始代码几乎是正确的……您问了一个非常好的第一个问题,超出了通常在SO上发生的情况:-)但是根据建议的解决方案,我得到的日期是“YYYY-MM-DD”格式。我希望日期是“DD-MMM-YYYY”。我想要3个字符的月份名为“Jan”。有可能吗?我的答案和Tim在不显示秒数的情况下给出的答案一样:当你查询表格时,你可以根据需要格式化日期。你没有理解我。当我加载表中文件的内容时,它们被加载为“2009-05-01”,而不是“01-May-2009”。我想以这种方式加载表中的内容。有可能吗?不,你没有理解我。这只是一个显示问题。查询日期时必须设置日期的格式。
...
SET date = STR_TO_DATE(@var1, '%d-%b-%Y'), time = TIME(str_to_date(@var2, "%H:%i"));