首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 排序中 NULL 值處理五大方法完整對比

     編輯:Oracle 資料庫相關知識

ORDER BY 預設視 NULL 為最大值 (ASC 最後、DESC 最前)。實務常需自訂 NULL 排序位置,五大方法如下:

方法對比表

方法語法範例適用場景優缺點
1. 預設ORDER BY col ASC無特殊需求NULL 視為最大值
2. NVLORDER BY NVL(col, '張三')單一替代值簡單,但替代值需與欄位型別相容
3. DECODEORDER BY DECODE(col, NULL, '張三', col)單一替代值,邏輯更清晰功能同 NVL,可讀性略好
4. CASEORDER BY CASE WHEN col IS NULL THEN '張三' ELSE col END複雜條件、多重替代最靈活,支援任意運算式
5. NULLS FIRST/LAST (9i+)ORDER BY col NULLS FIRST
ORDER BY col DESC NULLS LAST
純粹控制 NULL 位置,不改值語義最清晰、效能最佳、不需轉型

實戰範例

-- 5.1 NULL 永遠排最前 (不論 ASC/DESC)
SELECT * FROM zl_cbqc ORDER BY cb_ld NULLS FIRST;

-- 5.2 NULL 永遠排最後
SELECT * FROM zl_cbqc ORDER BY cb_ld DESC NULLS LAST;

-- 4. CASE 進階:NULL 排中間,特定值排最前
SELECT * FROM emp
ORDER BY CASE
           WHEN ename = 'KING' THEN 1
           WHEN ename IS NULL THEN 2
           ELSE 3
         END, ename;

最佳實務建議

  • 首選 NULLS FIRST/LAST:語法簡潔、語義明確、無型別轉換風險、優化器最易識別。
  • 需將 NULL 替換為具體值參與排序時,用 CASE (9i+) 或 DECODE。
  • 避免 NVL 於排序中使用,因替代值可能改變排序語義 (如數值欄位 NVL 為 0 會干擾實際 0 值)。

掌握 NULL 排序控制,能讓報表與應用呈現符合業務預期的資料順序。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved