2010-12-21 49 views
0

我试图导入文件后重新排序表,但我对这个查询得到一个MySQL的语法错误:ALTER TABLE ORDER BY STR_TO_DATE和TIME_TO_SEC

ALTER TABLE tablename ORDER BY str_to_date(date, '%m/%d/%Y'), time_to_sec(time) ASC 

有人能看到什么错呢?这是我得到的错误:

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 '(date, '%m/%d/%Y'), time_to_sec(time) ASC' at line 1 

回答

0

你尝试

ALTER TABLE tablename ORDER BY date, time ASC

我提到这一点,因为它可能给你所需要的顺序。

否则,您需要按照德语Rumm的建议操作,使用正确的数据类型添加列,或者在执行SQL时进行排序。

2

根据mysql手册,ALTER TABLE ORDER BY需要一个col_name,但您试图使用函数对其进行排序。

我建议创建2个新列,用函数结果填充它们,然后按顺序排列。

1

您可能不得不为此使用临时表,因为您是通过函数进行排序的。

CREATE TABLE temp_tablename AS SELECT * FROM tablename; 

TRUNCATE tablename; 

INSERT INTO tablename SELECT * FROM temp_tablename; 

DROP temp_tablename; 

你可以做第一个语句CREATE TEMPORARY TABLE,但如果你失去了你,你会失去你的数据。

+0

实际上我已经在做类似于此的事情,但需要在将数据发送到永久表之前对数据进行排序。在插入声明中,我在声明的最后添加了按顺序。 – Jubair 2010-12-21 22:59:15

0

我想我解决了这个问题。我将临时表中的导入数据存储在临时表中,并且在插入新表之前需要首先对临时表中的数据进行排序。所以我做的是通过select语句插入到新表中,该语句具有order by语句。

0

您正在使用旧版本的mysql,STR_TO_DATE只能从MySQL 4.1.1版本以上。

更新MySQL版本。