2016-12-09 1 views
0

J'ai une question et je n'ai pas trouvé la solution sur stackoverflow. Alors, voici ma question:ordre par datetime avec le type varchar

Comment puis-je commander une priorité Varchar on datetime (jj/mm/aa hh: mm: ss) dans mon fichier PHP? J'ai une table SQL avec une colonne "registerdate". Son type est Varchar (datetime n'est pas possible en raison d'autres problèmes de table). Mon SQL ORDER BY requête est:

SELECT * FROM users ORDER BY registerdate DESC LIMIT 3 

Il en résulte:

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

Comment je le veux:

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

Dans mon fichier php j'enregistrer le temps avec datetime $ = Date ("d/m/y H: i: s"); et dans ma table c'est un Varchar qui ressemble à 03/12/16 12:19:33

Je pense que je dois le CONVERTIR dans ma requête SQL mais je ne sais pas comment. Qui peut m'aider? Merci d'avance!

----- SERVEUR/INFO ----- SQL

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

COMMANDER PAR STR_TO_DATE (date d'enregistrement,'% d /% m /% Y% h:% i:% s ') – Kamal

+0

Merci Kamal. Solution: COMMANDER PAR STR_TO_DATE (registerdate, '% d /% m /% y% H:% i:% s') Donc majuscule H au lieu d'une minuscule h et minuscule y au lieu d'une majuscule Y. – Maarten

+0

Gardez à l'esprit que la performance ne sera pas bonne. Vous devriez vraiment stocker les valeurs datetime dans un type de données 'DATETIME' (ou' TIMESTAMP'). Ce commentaire s'applique à toutes les solutions suggérées jusqu'à présent. –

Répondre

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

ou

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

Merci pour votre aide, mais les deux ne fonctionnent pas. J'ai oublié de dire que dans mon fichier php j'inscris l'heure avec '$ datetime = date (" d/m/y H: i: s ");' et dans ma table c'est un Varchar qui ressemble à '03/12/16 12: 19: 33 ». – Maarten

+0

Désolé, trop tôt. Ça ne marche pas. La date est bonne, mais le temps ne l'est pas. – Maarten

+0

Quel genre d'erreur avez-vous? Ou cela fonctionne, mais les résultats ne sont pas dans le bon ordre? – saltydogd

0

Je pense que cela fonctionnera pour vous aussi si vous utilisez le serveur sql .

SELECT * FROM utilisateurs ORDER BY Cast (registerdate DATETIME) CEEPC

+0

Merci, mais ça ne marche pas .. J'ai oublié de dire que dans mon fichier php j'inscris l'heure avec '$ datetime = date (" d/m/y H: i: s ");' et dans ma table c'est un Varchar qui ressemble '03/12/16 12: 19: 33 » – Maarten

0

Pour une base de données Oracle la syntaxe serait:

SELECT * FROM utilisateurs ORDER BY TO_DATE (registerdate, « JJ/MM/AA HH24: MI: SS ') DESC