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

Oracle CASE WHEN 與 DECODE 條件表達式寫法對比

     編輯:Oracle 資料庫相關知識

場景:操作類型碼轉中文描述

operatetype: 0=新增, 1=修改, 其他=刪除

寫法 1:標準 CASE 表達式 (推薦)

SELECT logid, userid, logtime, url, description,
       CASE
         WHEN operatetype = 0 THEN '新增'
         WHEN operatetype = 1 THEN '修改'
         ELSE '刪除'
       END AS operation_name
FROM log;
  • 可讀性強,支援複雜條件 (`WHEN col > 10 AND col < 20`)
  • ANSI SQL 標準,跨資料庫可移植
  • 可作為標量子查詢、聚合參數、ORDER BY 等任意表達式位置使用

寫法 2:DECODE 函數 (Oracle 專用)

SELECT logid, userid, logtime, url, description,
       DECODE(operatetype, 0, '新增', 1, '修改', '刪除') AS operation_name
FROM log;
  • 語法緊湊,僅支援**等值比較**
  • Oracle 內部優化極好,極簡情況效能略優
  • 12c+ 仍完整支援,但新代碼建議用 CASE

對比總結

維度CASEDECODE
標準ANSI SQLOracle 專有
條件類型任意布林表達式僅等值匹配
可讀性高 (多行)高 (單行)
效能相同 (優化器同等對待)相同
NULL 處理`WHEN col IS NULL`自動匹配 NULL (DECODE(null, null, '是'))
建議**首選** (標準、靈活)簡單等值映射可用

進階:搜尋型 CASE (Searched CASE)

CASE
  WHEN sal < 1000 THEN 'Low'
  WHEN sal BETWEEN 1000 AND 3000 THEN 'Medium'
  WHEN sal > 3000 THEN 'High'
  ELSE 'Unknown'
END

此寫法 DECODE 無法直接實現。

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