Page 1 sur 1

Classement de dates au formats AAAA-MM-JJ

Posté : 23 août 2006, 10:46
par sunnmagic
Bonjour à tous,

J'ai une liste d'éléments dans une BDD que je souhaiterai classer par date, de la plus proche à la plus éloignée.

Parfois, le jour et le mois sont inconnus, je ne met dans ce cas que l'année, ex : "2007-00-00".

Comment classer ces dates correctement ? Car un simple "ORDER BY" ne fonctionnet pas correctement, ce qui est normal, puisqu'entre "2006-00-00" et "2006-11-10", il renvoi d'abord "2006-00-00"...

Or, je voudrais que dans le classement apparaissent d'abord les dates complètes (ex : 2006-11-10), puis les dates qui n'ont pas de jour (ex : 2006-11-00), puis les dates qui n'ont que l'année (ex : 2006-00-00)...

Je ne trouve pas... Merci d'avance !!!

Posté : 23 août 2006, 12:40
par Henri
Si c'est toi qui contrôle ce que tu mets quand il n'y a que l'année, pourquoi tu ne mets pas 2006-99-99 au lieu de 2006-00-00 ?

Comme ça, tes dates arrivent en dernier.

Posté : 23 août 2006, 15:02
par poulé
Et si tu utilises ORDER BY mon_champ DESC

Posté : 23 août 2006, 19:11
par Ryle
Et si tu utilises ORDER BY mon_champ DESC
Il aura le 31 avant le 1er et je pense qu'il les veut quand même par ordre chronologique. La solution d'Henri me parait la plus simple, mais n'est pas forcément évidente à mettre en place si tu as déjà des données ou si tu prends déjà en compte un peu partout cette histoire de 00-00.

Sinon tu peux utiliser les fonctions YEAR(), MONTH(), DAY() (ou SUBSTRING()) et CASE/WHEN/THEN de mysql pour tester tes dates et créer une colonne de tri. Tu mettrais alors 99 à la place des 00 et ordonnerais ta requête sur ce champ

Code : Tout sélectionner

SELECT ... , CASE MONTH(champ_date) WHEN '00' THEN 99 ELSE MONTH(champ_date) END AS tri FROM table ORDER BY tri
A compléter pour prendre en compte l'année et le jour

Posté : 24 août 2006, 08:19
par poulé
Il aura le 31 avant le 1er et je pense qu'il les veut quand même par ordre chronologique.
Il a dit qu'il voulait les dates de la plus proche à la plus éloignée, donc en fait ça dépend si sa base contient des dates passées ou futur à mon avis ;)

Posté : 24 août 2006, 09:27
par iclo
Oui, mais comme il explique, il y a certaines dates "imcomplêtes" sans joun, et qui doivent être située à la fin des jours du mois dans la requêtte, d'où la raison d'utilisé une valeur plus élevé que possible pour les jours qui ne sont pas renseigné : >31