Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Ordenar por data decrescente - mês, dia e ano


Acho que EventDate é um char ou varchar e não uma data, caso contrário seu pedido por cláusula ficaria bem.

Você pode usar CONVERT para alterar os valores para uma data e classificar por essa
SELECT * 
FROM 
     vw_view 
ORDER BY 
   CONVERT(DateTime, EventDate,101)  DESC

O problema com isso é, como Sparky aponta nos comentários, se EventDate tiver um valor que não possa ser convertido em uma data, a consulta não será executada.

Isso significa que você deve excluir as linhas ruins ou deixar as linhas ruins irem para a parte inferior dos resultados

Para excluir as linhas ruins, basta adicionar WHERE IsDate(EventDate) = 1

Para deixar as datas ruins irem para o fundo, você precisa usar CASE

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