3 回答

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
select MyDate
from MyTable
order by case when MyDate is null then 1 else 0 end, MyDate

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
(“位”晚了,但這一點(diǎn)都沒有提到)
您未指定DBMS。
您可以在標(biāo)準(zhǔn)SQL(以及大多數(shù)現(xiàn)代DBMS(如Oracle,PostgreSQL,DB2,F(xiàn)irebird,Apache Derby,HSQLDB和H2)中)指定NULLS LAST或NULLS FIRST:
用于NULLS LAST將它們排序到末尾:
select *
from some_table
order by some_column DESC NULLS LAST

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