2010-12-21 10 views
0

Ich versuche, eine Tabelle neu zu ordnen, nachdem eine Datei zu importieren, aber eine MySQL-Syntax-Fehler auf dieser Abfrage bin immer:ALTER TABLE ORDER BY str_to_date und time_to_sec

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

Kann jemand etwas falsch mit diesem sehen? dies ist der Fehler Ich erhalte:

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 

Antwort

0

Versuchen Sie

ALTER TABLE tablename ORDER BY date, time ASC

Ich erwähne dies, weil es Ihnen die Bestellung Sie benötigen geben.

Andernfalls müssen Sie entweder tun, wie German Rumm vorgeschlagen, Spalten mit dem richtigen Datentyp hinzufügen, oder tun Sie Ihre Bestellung, wenn Sie Ihre SQL tun.

2

Gemäß Mysql Handbuch, ALTER TABLE ORDER BY erwartet ein col_name, aber Sie versuchen, es mit einer Funktion zu bestellen.

Ich schlage vor, erstellen Sie 2 neue Spalten, füllen Sie sie mit Funktionsergebnisse, und bestellen Sie danach.

1

Sie müssen möglicherweise eine temporäre Tabelle dafür verwenden, da Sie eine Funktion bestellen.

CREATE TABLE temp_tablename AS SELECT * FROM tablename; 

TRUNCATE tablename; 

INSERT INTO tablename SELECT * FROM temp_tablename; 

DROP temp_tablename; 

Sie könnten der erste Aussage machen eine CREATE TEMPORARY TABLE, aber wenn Sie Ihre Sitzung verlieren verlieren Sie Ihre Daten.

+0

tatsächlich bereits etwas ähnliches, aber musste die Daten vor dem Senden an die permanente Tabelle zu sortieren. In der Insert-Anweisung habe ich am Ende die Reihenfolge nach Aussage hinzugefügt. – Jubair

0

Ich denke, ich habe dieses Problem gelöst. Ich habe importierte Daten in einer temporären Tabelle gespeichert, bevor ich sie in die permanente Tabelle verschoben habe, und die Daten in der temporären Tabelle zuerst sortieren müssen, bevor ich sie in die neue Tabelle einfügen konnte. Also was ich tue, ist stattdessen einfügen in die neue Tabelle über eine Select-Anweisung, die die Reihenfolge nach Anweisung hat.

0

Sie verwenden eine ältere Version von mysql, STR_TO_DATE ist nur verfügbar ab Version 4.1.1 von MySQL.

Aktualisieren Sie die MySQL-Version.