Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Trier par date décroissante - mois, jour et année

Je devine EventDate est un caractère ou un varchar et non une date, sinon votre commande par clause serait correcte.

Vous pouvez utiliser CONVERT pour changer les valeurs en une date et trier par cela

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, soit 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

ex.

ORDER BY 
    CASE
       WHEN IsDate(EventDate) = 1 THEN CONVERT(DateTime, EventDate,101)
       ELSE null
    END DESC