Bonjour
Au sein de requêtes diverses en triant par MOIS (peu importe le reste de la requête):
J'ai dans ma base les dates stockées sous le format: (xxxxxx étant les millièmes, centièmes de secondes, etc...)
'YYYYMMDDxxxxxx' => Ex: '20110101000000'
Une fonction Appelée dbo.F_VARCHAR_TO_DATETIME permet de convertir au format date
Si je veux afficher en Majuscule le MOIS je fais:
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part SELECT DISTINCT UPPER(DATENAME(MONTH,dbo.F_VARCHAR_TO_DATETIME(MATABLE.MADATE))) FROM MATABLE
Mais si je veux trier par mois et fais:
CELA NE ME TRIE PAS en JANVIER, FEV,MARS etc... mais dans l'ordre AOUT,AVRIL,DECEMBRE etc, c'est à dire par ordre ALPHABETIQUE
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT DISTINCT UPPER(DATENAME(MONTH,dbo.F_VARCHAR_TO_DATETIME(MATABLE.MADATE))) FROM MATABLE ORDER BY UPPER(DATENAME(MONTH,dbo.F_VARCHAR_TO_DATETIME(MATABLE.MADATE)))
J'imagine qu'il faut faire le tri de la façon suivante:
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT DISTINCT UPPER(DATENAME(MONTH,dbo.F_VARCHAR_TO_DATETIME(MATABLE.MADATE)))FROM MATABLE ORDER BY SUBSTRING(MATABLE.MADATE,5,2)
Mais j'obtiens le message:
Les éléments ORDER BY doivent se retrouver dans la liste de sélection si SELECT DISTINCT est spécifié.
Si je rajoute au SELECT :
cela me multiplie les lignes...
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT DISTINCT UPPER(DATENAME(MONTH,dbo.F_VARCHAR_TO_DATETIME(MATABLE.MADATE))),SUBSTRING(MATABLE.MADATE,5,2) FROM MATABLE ORDER BY SUBSTRING(MATABLE.MADATE,5,2)
JANVIER NULL
JANVIER
JANVIER 01
FÉVRIER 02
JANVIER 02
MARS 03
AVRIL 04
MAI 05
JUIN 06
JANVIER 06
JUILLET 07
JANVIER 08
AOÛT 08
SEPTEMBRE 09
JANVIER 09
OCTOBRE 10
NOVEMBRE 11
JANVIER 11
JANVIER 12
DÉCEMBRE 12
JANVIER 50
Que faudrait-il faire?
merci
Partager