Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Uporządkuj malejąco według daty - miesiąc, dzień i rok

Zgaduję EventDate to znak lub varchar, a nie data, w przeciwnym razie Twoje zamówienie według klauzuli będzie w porządku.

Możesz użyć opcji CONVERT, aby zmienić wartości na datę i posortować według tego

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

Problem polega na tym, jak wskazuje Sparky w komentarzach, jeśli EventDate ma wartość, której nie można przekonwertować na datę, której zapytanie nie zostanie wykonane.

Oznacza to, że powinieneś albo wykluczyć złe wiersze, albo pozwolić, by złe wiersze trafiły na dół wyników

Aby wykluczyć złe wiersze, po prostu dodaj WHERE IsDate(EventDate) = 1

Aby złe daty spadły na sam dół, musisz użyć CASE

np.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę zaktualizować nowo dodaną kolumnę w tym samym zestawieniu partii?

  2. SQL GUID vs Integer

  3. Konwersja string na int w linq do encji w dużej bazie danych

  4. SQL Server:Uzyskaj klucz podstawowy tabeli za pomocą zapytania sql

  5. Uzyskaj bieżący identyfikator logowania w SQL Server (T-SQL)