3 votes

Comment commander par horodatage dans mysql ?

SELECT * FROM table ORDER BY timestamp;

Lorsque j'essaie d'ordonner les enregistrements en fonction de leur date, j'obtiens l'ordre suivant

08/20/2012 02:09:39 PM
08/20/2012 03:19:08 PM
08/20/2012 09:04:24 AM
08/20/2012 09:05:25 AM

Comment modifier la requête pour que les enregistrements soient classés de AM à PM ?

4voto

spencer7593 Points 29263

Le problème est que votre représentation de l'horodatage sous forme de chaîne n'est pas au format canonique, c'est-à-dire que le tri de la valeur de la chaîne ne se fait pas dans l'ordre de l'horodatage.

Pour trier les lignes dans l'ordre, vous pouvez convertir la représentation en caractères de la valeur en un type de données DATETIME ou TIMESTAMP, ou au moins en une représentation en caractères dans un format canonique (par exemple, "YYYY-MM-DD hh:mm:ss" avec une horloge de 24 heures).

En STR_TO_DATE est utile pour convertir une chaîne de caractères dans un format connu en DATETIME :

SELECT * FROM table
ORDER BY STR_TO_DATE(`timestamp`,'%m/%d/%Y %h:%i:%s %p')

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date

3voto

bluefeet Points 105508

Vous voudrez utiliser STR_TO_DATE()

select *
from dates
order by STR_TO_DATE(dt,'%m/%d/%Y %h:%i:%s') desc

Voir SQL Fiddle avec démo

2voto

Dan Barzilay Points 1828

Il suffit d'ajouter le DESC :

SELECT * FROM table ORDER BY timestamp DESC;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X