Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Подреждане по низходяща дата - месец, ден и година

Предполагам EventDate е char или varchar, а не дата, в противен случай вашата поръчка по клауза би била наред.

Можете да използвате CONVERT, за да промените стойностите на дата и да сортирате по това

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

Проблемът с това е, както Спарки посочва в коментарите, че ако EventDate има стойност, която не може да бъде преобразувана в дата, заявката няма да се изпълни.

Това означава, че трябва или да изключите лошите редове, или да оставите лошите редове да отидат в края на резултатите

За да изключите лошите редове, просто добавете WHERE IsDate(EventDate) = 1

За да позволите на лошите дати да отидат на дъното, трябва да използвате CASE

напр.

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. Как да използвате SQL Server HierarchyID чрез лесни примери

  2. Обосновка за редовно обслужване на SQL сървър

  3. Генериране на скриптове за конкретни записи в SQL Server

  4. Включване или изключване на идентичността в SQL сървъра

  5. 5 начина за намиране на редове, които съдържат главни букви в SQL Server