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

Oracle DECODE 函數詳解:條件轉換的瑞士刀

     編輯:關於SqlServer

什麼是 DECODE?

DECODE 是 Oracle 專有的條件轉換函數,語法簡潔、可讀性高,常用於將編碼值轉換為可讀標籤、實現簡易 CASE 邏輯。

語法

DECODE(表達式, 條件值1, 結果值1, 條件值2, 結果值2, ..., 預設值)

等同於:

IF 表達式 = 條件值1 THEN 結果值1
ELSIF 表達式 = 條件值2 THEN 結果值2
...
ELSE 預設值 END IF

基本範例

-- 銷售等級轉換
SELECT month_id,
       DECODE(sale_amt,
              1000, 'D',
              2000, 'C',
              3000, 'B',
              4000, 'A',
              'Other') AS sale_grade
FROM output;

特殊情況處理

1. 單一值比較 + NULL 處理

SELECT month_id,
       DECODE(sale_amt, NULL, '---', sale_amt) AS sale_amt
FROM output;

2. 搭配 NVL 處理 NULL

-- 若 sale_amt 為 NULL 則視為 6000
SELECT month_id,
       DECODE(NVL(sale_amt, 6000), 6000, 'NG', 'OK') AS status
FROM output;

3. 搭配 SIGN 取較小值

-- 回傳 sale_amt 與 6000 中較小者
SELECT month_id,
       DECODE(SIGN(sale_amt - 6000), -1, sale_amt, 6000) AS min_val
FROM output;

DECODE vs CASE

特性DECODECASE
可讀性簡單等值判斷極佳支援範圍、複合條件
NULL 比較可直接匹配 NULL需用 IS NULL
可移植性Oracle 專有ANSI 標準,跨資料庫

實務建議

  • 簡單等值映射首選 DECODE,程式碼更緊湊。
  • 涉及範圍、多條件、巢狀邏輯請改用 CASE WHEN。
  • 新專案若考慮跨資料庫遷移,建議統一使用 CASE。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved