3 回答

TA貢獻1798條經驗 獲得超3個贊
select MyDate
from MyTable
order by case when MyDate is null then 1 else 0 end, MyDate

TA貢獻1786條經驗 獲得超11個贊
(“位”晚了,但這一點都沒有提到)
您未指定DBMS。
您可以在標準SQL(以及大多數現代DBMS(如Oracle,PostgreSQL,DB2,Firebird,Apache Derby,HSQLDB和H2)中)指定NULLS LAST或NULLS FIRST:
用于NULLS LAST將它們排序到末尾:
select *
from some_table
order by some_column DESC NULLS LAST

TA貢獻1851條經驗 獲得超4個贊
如果您的引擎允許ORDER BY x IS NULL, x或ORDER BY x NULLS LAST使用。但是,如果不是這樣,這些方法可能會有所幫助:
如果按數字類型排序,則可以執行以下操作:(從另一個答案借用架構。)
SELECT *
FROM Employees
ORDER BY ISNULL(DepartmentId*0,1), DepartmentId;
結果顯示按DepartmentId排序,最后為null
任何非空數都將變為0,并且空值將變為1,這將最后對空值進行排序。
您還可以對字符串執行此操作:
SELECT *
FROM Employees
ORDER BY ISNULL(LEFT(LastName,0),'a'), LastName
結果顯示按LastName排序,其中null為last
因為'a'> ''。
這甚至可以通過強制為可為null的int并將上述方法用于int來處理日期:
SELECT *
FROM Employees
ORDER BY ISNULL(CONVERT(INT, HireDate)*0, 1), HireDate
(假設該模式具有HireDate。)
這些方法避免了必須提出或管理每種類型的“最大值”值或在數據類型(和最大值)發生更改時修復查詢的問題(這是其他ISNULL解決方案所遇到的問題)。另外,它們比CASE短得多。
- 3 回答
- 0 關注
- 1557 瀏覽
添加回答
舉報