我有一个数据集如下,
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网站和文档,但无法确定正确的格式是什么。谁能取悦我。提前谢谢。
我认为您甚至不需要在这里使用TIME
函数。 您当前的hour:minute
字符串时间文字应该足够好,q.v. 文档:
在为 TIME 列分配缩写值时要小心。MySQL将带有冒号的缩写TIME值解释为一天中的时间。也就是说
,"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');
指出,您不需要在 load data infile
语句中转换时间数据。
只是为了回答为什么会出现语法错误:load data infile
只能有一个set
子句,其中对多个列的赋值用逗号分隔。您的代码有多个 set
子句,因此会失败。
此外,time()
函数没有模式的第二个参数。您需要使用的函数称为 str_to_date()。
因此,它应如下所示:
...
SET date = STR_TO_DATE(@var1, '%d-%b-%Y'), time = TIME(str_to_date(@var2, "%H:%i"));