2017-03-23 25 views

Trả lời

2
Select * 
From YourTable 
Order By case when DateCol is null then 1 else 0 end 
     ,DateCol 

Hoặc thậm chí Order By IsNull(DateCol,'2525-12-31')

+1

"Trong năm 2525 nếu người đàn ông vẫn còn sống"? –

+0

@ZoharPeled Cuối cùng! Ai đó đã nhận được rằng –

+0

Tôi thích những bài hát cũ ... –

12

Trong SQL tiêu chuẩn mà bạn có thể xác định nơi để đặt null:

order by col asc nulls first 
order by col asc nulls last 
order by col desc nulls first 
order by col desc nulls last 

nhưng T-SQL không tuân thủ các tiêu chuẩn tại đây. Trình tự NULLs phụ thuộc vào việc bạn sắp xếp tăng dần hoặc giảm dần trong T-SQL:

order by col asc -- implies nulls first 
order by col desc -- implies nulls last 

Với số nguyên bạn có thể chỉ đơn giản là sắp xếp theo các tiêu cực:

order by -col asc -- sorts by +col desc, implies nulls first 
order by -col desc -- sorts by +col asc, implies nulls last 

Nhưng điều này là không thể với số ngày (hoặc chuỗi cho vấn đề đó), vì vậy trước tiên bạn phải sắp xếp theo là null/không phải là null và chỉ sau đó theo cột của bạn:

order by case when col is null then 1 else 2 end, col asc|desc -- i.e. nulls first 
order by case when col is null then 2 else 1 end, col asc|desc -- i.e. nulls last 
+0

+1 để gọi ra sự khác biệt so với TSQL tiêu chuẩn. 'order by col asc' cho nulls đầu tiên và' order by col desc' cho nulls cuối cùng bởi vì SQL Server xử lý các giá trị Null như các giá trị thấp nhất có thể, xem [SELECT - ORDER BY Clause] (https://docs.microsoft.com/ en-us/sql/t-sql/truy vấn/select-order-by-clause-transact-sql) – HappyTown

Các vấn đề liên quan