2010-12-21 78 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版本。