Cela semble stupide mais, j'ai juste besoin d'une list de dates à order avec la date la plus récente en haut. Utiliser la order by DESC
ne semble pas fonctionner comme je le veux.
SELECT * FROM vw_view ORDER BY EventDate DESC
Il me donne la date ordonnée par mois et par jour, mais ne prend pas l'année en considération. par exemple:
12/31/2009 12/31/2008 12/30/2009 12/29/2009
Doit être plus comme:
12/31/2009 12/30/2009 12/29/2009 12/28/2009
etc.
Je devine EventDate
est un char ou varchar et pas une date sinon votre command par clause irait bien.
Vous pouvez utiliser CONVERT pour modifier les valeurs à une date et sortinger par cette
SELECT * FROM vw_view ORDER BY CONVERT(DateTime, EventDate,101) DESC
Le problème avec cela est, comme le souligne Sparky dans les commentaires, si EventDate a une valeur qui ne peut pas être convertie en une date, la requête ne s'exécutera pas.
Cela signifie que vous devez soit exclure les mauvaises lignes ou laisser les mauvaises lignes aller au bas des résultats
Pour exclure les mauvaises lignes, ajoutez simplement WHERE IsDate(EventDate) = 1
Pour laisser les mauvaises dates aller vers le bas, vous devez utiliser CASE
par exemple
ORDER BY CASE WHEN IsDate(EventDate) = 1 THEN CONVERT(DateTime, EventDate,101) ELSE null END DESC
Essayer:
ORDER BY MONTH(Date),DAY(DATE)
EDIT (Par user anonyme.)
Je crois que ce post est terminé avec, mais cet user ci-dessus a touché quelque chose qui a résolu mon problème au-dessus de tous les autres.
Si quelqu'un a des problèmes avec les autres solutions, essayez un mod mineur du code ci-dessus.
ORDER BY YEAR(Date) DESC, MONTH(Date) DESC, DAY(DATE) DESC
C'était ma dernière approche et cela fonctionnait parfaitement sur une DB JET.
PS. J'espère que personne n'utilise réellement Date
comme nom de champ 😉
Vous avez le champ dans une string, vous aurez donc besoin de le convertir en datetime
order by CONVERT(datetime, EventDate ) desc
quel est le type du champ EventDate
, puisque la command n'est pas correcte, je suppose que vous ne l'avez pas défini sur un type de date / heure, mais une string. Et puis la façon américaine d'écrire des dates est désagréable à sortinger
Si vous avez restructuré votre format de date en AAAA / MM / JJ, vous pouvez utiliser cette command de string simple pour get le format dont vous avez besoin.
Vous pouvez également utiliser la command SUBSTR (nom_magasin, start, length) pour restructurer le terme de sorting dans le format ci-dessus
peut-être en utilisant ce qui suit
SELECT * FROM vw_view ORDER BY SUBSTR(EventDate,6,4) + SUBSTR(EventDate, 0, 5) DESC
En supposant que vous avez le pouvoir de modifier les schémas, la seule réponse acceptable à cette question est de changer le type de données de base en quelque chose de plus approprié (par exemple, date
si SQL Server 2008).
Le stockage des dates sous forme de strings mm/dd/yyyy
est inefficace, difficile à valider correctement et rend le sorting et les calculs de date inutilement douloureux.