ALTER TABLE ORDER BY str_to_date和time_to_sec

时间:2010-12-21 22:40:30

标签: mysql mysql-error-1064

我尝试在导入文件后重新排序表但是在此查询中出现mysql语法错误:

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

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

由于您正在通过函数进行排序,因此可能必须使用临时表。

CREATE TABLE temp_tablename AS SELECT * FROM tablename;

TRUNCATE tablename;

INSERT INTO tablename SELECT * FROM temp_tablename;

DROP temp_tablename;

您可以将第一个语句设为CREATE TEMPORARY TABLE,但如果您丢失了会话,则会丢失数据。

答案 2 :(得分:0)

你试过吗

ALTER TABLE tablename ORDER BY date, time ASC

我之所以提到这一点,是因为它可能会为您提供所需的订单。

否则,你需要像德国Rumm建议的那样,添加具有正确数据类型的列,或者在执行SQL时进行排序。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您使用的是旧版本的mysql,STR_TO_DATE仅适用于MySQL 4.1.1版。

更新MySQL版本。