Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Thứ tự theo ngày giảm dần - tháng, ngày và năm

Tôi đoán EventDate là một char hoặc varchar và không phải là một ngày tháng nếu không, việc đặt hàng theo điều khoản của bạn sẽ ổn.

Bạn có thể sử dụng CONVERT để thay đổi các giá trị thành ngày tháng và sắp xếp theo ngày đó

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

Vấn đề với điều đó là, như Sparky chỉ ra trong các nhận xét, nếu EventDate có giá trị không thể chuyển đổi thành ngày thì truy vấn sẽ không thực thi.

Điều này có nghĩa là bạn nên loại trừ các hàng xấu hoặc để các hàng xấu ở cuối kết quả

Để loại trừ các hàng xấu, chỉ cần thêm WHERE IsDate(EventDate) = 1

Để bỏ qua những ngày tồi tệ, bạn cần sử dụng CASE

ví dụ:

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. Chuỗi kết nối DB trong Web.config để sử dụng cơ sở dữ liệu .mdf đính kèm sẽ không hoạt động

  2. Phép trừ giữa hai truy vấn sql

  3. Thực hiện regex (thay thế) trong một truy vấn SQL

  4. Di chuyển đám mây 101:Di chuyển từ SQL Server sang Azure

  5. Cài đặt và cấu hình SQL Server Log Shipping &Disaster Recovery -4