首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle DECODE、NVL、NVL2 函數用法詳解與組合應用

     編輯:Oracle 教學

Oracle DECODE、NVL、NVL2 函數用法詳解與組合應用

DECODE 函數

語法:DECODE(條件, 值1, 結果1, 值2, 結果2, ..., 預設值)

功能等同於程式語言中的 if...else if...else 邏輯。依序比較條件與各值,匹配則返回對應結果,無匹配返回預設值(可省略,預設為 NULL)。

NVL 函數

語法:NVL(expr1, expr2)

  • expr1 為 NULL 時,返回 expr2
  • expr1 非 NULL 時,返回 expr1
  • 兩參數皆為 NULL 時,返回 NULL

注意:兩參數資料型別必須一致,否則需顯式轉換(如 TO_CHAR)。

範例:SELECT NVL(SUM(t.dwxhl), 1) FROM tb_jhde t — 若加總為 NULL 則返回 1。

NVL2 函數

語法:NVL2(expr1, expr2, expr3)

  • expr1 為 NULL → 返回 expr3
  • expr1 非 NULL → 返回 expr2

可視為 NVL 的擴展,提供「非 NULL 時」與「NULL 時」兩種不同返回值。

函數組合實戰範例

範例 1:NVL + DECODE 處理銷售額判斷

SELECT monthid, DECODE(NVL(sale, 6000), 6000, 'NG', 'OK') FROM output;

邏輯:sale 若為 NULL 則視為 6000,進而判斷是否等於 6000 返回 'NG',否則 'OK'。

範例 2:SIGN + DECODE 實現取較小值

SELECT monthid, DECODE(SIGN(sale - 6000), -1, sale, 6000) FROM output;

SIGN 返回:負數→-1、零→0、正數→1。當 sale < 6000 時 SIGN 為 -1,返回 sale;否則返回 6000。達到 LEAST(sale, 6000) 效果。

進階替代方案

Oracle 9i+ 推薦使用 CASE 表達式替代 DECODE,可讀性更佳、支援複雜條件:

CASE 
  WHEN sale IS NULL THEN 'NG'
  WHEN sale < 6000 THEN sale
  ELSE 6000
END

快速比較表

函數用途參數數典型場景
NVLNULL 替換2預設值填充、聚合函數 NULL 處理
NVL2NULL/非 NULL 分支3條件分支、旗標轉換
DECODE等值多重分支可變簡單值映射、類別轉換
CASE通用條件分支可變複雜邏輯、範圍判斷、可讀性要求高
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved