Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Sortieren Sie nach absteigendem Datum - Monat, Tag und Jahr

Ich tippe auf EventDate ist ein char oder varchar und kein Datum, sonst wäre Ihre order by-Klausel in Ordnung.

Sie können CONVERT verwenden, um die Werte in ein Datum umzuwandeln und danach zu sortieren

SELECT * 
FROM 
     vw_view 
ORDER BY 
   CONVERT(DateTime, EventDate,101)  DESC

Das Problem dabei ist, wie Sparky in den Kommentaren darauf hinweist, dass die Abfrage nicht ausgeführt wird, wenn EventDate einen Wert hat, der nicht in ein Datum konvertiert werden kann.

Das bedeutet, dass Sie entweder die fehlerhaften Zeilen ausschließen oder die fehlerhaften Zeilen an das Ende der Ergebnisse stellen sollten

Um die fehlerhaften Zeilen auszuschließen, fügen Sie einfach WHERE IsDate(EventDate) = 1 hinzu

Um die schlechten Daten auf den Grund gehen zu lassen, müssen Sie CASE verwenden

z. B.

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