亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQL如何使空值升序排序時最后

SQL如何使空值升序排序時最后

LEATH 2019-11-22 15:15:36
我有一個帶日期時間字段的SQL表。有問題的字段可以為空。我有一個查詢,我希望結果按datetime字段升序排序,但是我希望datetime字段在列表的末尾而不是開頭的行為null。有沒有簡單的方法可以做到這一點?
查看完整描述

3 回答

?
呼如林

TA貢獻1798條經驗 獲得超3個贊

select MyDate

from MyTable

order by case when MyDate is null then 1 else 0 end, MyDate


查看完整回答
反對 回復 2019-11-22
?
Qyouu

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


查看完整回答
反對 回復 2019-11-22
?
繁花不似錦

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短得多。


查看完整回答
反對 回復 2019-11-22
  • 3 回答
  • 0 關注
  • 1557 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號