我尝试在导入文件后重新排序表但是在此查询中出现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
答案 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版本。