Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ordina per data decrescente - mese, giorno e anno

Immagino EventDate è un char o varchar e non una data, altrimenti il ​​tuo ordine per clausola andrebbe bene.

Puoi utilizzare CONVERT per modificare i valori in una data e ordinarli in base a quella

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

Il problema è, come sottolinea Sparky nei commenti, se EventDate ha un valore che non può essere convertito in una data, la query non verrà eseguita.

Ciò significa che dovresti escludere le righe errate o lasciare che le righe errate vadano in fondo ai risultati

Per escludere le righe non valide basta aggiungere WHERE IsDate(EventDate) = 1

Per far andare a fondo le date errate devi usare CASE

es.

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