2016-12-09 10 views
0

Ich habe eine Frage und ich habe die Lösung auf Stackoverflow nicht gefunden. Also hier ist meine Frage:Sortieren nach Datum Uhrzeit mit Typ varchar

Wie kann ich eine Varchar auf Datetime (TT/MM/JJ hh: mm: ss) Prioritäten in meiner PHP-Datei bestellen? Ich habe eine SQL-Tabelle mit einer Spalte "Registerdate". Sein Typ ist Varchar (Datetime ist aufgrund anderer Tabellenprobleme nicht möglich). My SQL ORDER BY-Abfrage ist:

SELECT * FROM users ORDER BY registerdate DESC LIMIT 3 

Daraus ergibt sich:

12-11-16 11:03:54 
06-12-16 19:05:22 
06-12-16 15:03:30 

Wie ich es will:

06-12-16 19:05:22 
06-12-16 15:03:30 
12-11-16 11:03:54 

In meiner PHP-Datei ich die Zeit mit $ Datetime registrieren = date ("d/m/y H: i: s"); und in meiner Tabelle ist es ein Varchar, der aussieht wie 03/12/16 12:19:33

Ich denke, ich muss es in meiner SQL-Abfrage konvertieren, aber ich weiß nicht wie. Wer kann mir helfen? Vielen Dank im Voraus!

----- SERVER/SQL INFO -----

Server: Localhost via UNIX socket 
Servertype: MariaDB 
Serverversie: 10.0.27-MariaDB-cll-lve - MariaDB Server 
Protocolversie: 10 
+0

BESTELLUNG DURCH STR_TO_DATE (registerdate,'% d /% m /% Y% h:% i:% s ') – Kamal

+0

Danke Kamal. Lösung: ORDER BY STR_TO_DATE (registerdate, '% d /% m /% y% H:% i:% s') So Großbuchstabe H anstelle von einem Kleinbuchstabe h und Kleinbuchstabe y anstelle von einem Großbuchstabe Y. – Maarten

+0

Keep in Beachten Sie, dass die Leistung nicht gut sein wird. Sie sollten Datetime-Werte wirklich in einem 'DATETIME'- (oder' TIMESTAMP'-) Datentyp speichern. Dieser Kommentar gilt für alle bisher vorgeschlagenen Lösungen. –

Antwort

0
SELECT * FROM users u ORDER BY STR_TO_DATE(u.registerdate, '%d/%m/%Y %H:%i:%s') DESC LIMIT 3 

oder

SELECT *, STR_TO_DATE(u.registerdate, '%d/%m/%Y %H:%i:%s') as newdate FROM users u ORDER BY newdate DESC LIMIT 3 
+0

Danke für Ihre Hilfe, aber beide funktionieren nicht. Ich habe vergessen zu sagen, dass ich in meiner php-Datei die Zeit mit $ datetime = date ("d/m/y H: i: s") registriere; und in meiner Tabelle ist es ein Varchar, der wie '03/12 aussieht/16 12: 19: 33'. – Maarten

+0

Sorry, zu früh. Es funktioniert nicht. Das Datum ist gut bestellt, aber die Zeit ist nicht. – Maarten

+0

Welche Art von Fehler haben Sie? Oder es funktioniert, aber die Ergebnisse sind nicht in der richtigen Reihenfolge? – saltydogd

0

Ich denke, dies auch für Sie arbeiten, wenn Sie SQL Server verwenden .

SELECT * FROM users ORDER BY Besetzung (Erstzulassung als Datum-) DESC

+0

Danke, aber es funktioniert nicht .. Ich habe vergessen zu sagen, dass ich in meiner PHP-Datei die Zeit mit $ datetime = Datum ("d/m/y H: i: s"); 'und in meiner Tabelle ist es ein Varchar, der aussieht wie' 03/12/16 12: 19: 33' – Maarten

0

Für eine Oracle-Datenbank wäre die Syntax:

SELECT * FROM users ORDER BY TO_DATE (Erstzulassung: ‚TT/MM/JJ HH24: MI: SS ') DESC