DECODE 函數和 CASE-WHEN 表達式的比較

在 SQL 中咱們一般認爲如下兩種寫法是等價的:數據庫

DECODE(PARAM, VALUE1, RESULT1 {, VALUE2, RESULT2} [, DEFAULT_RESULT])函數

CASE PARAM WHEN VALUE1 THEN RESULT1 {WHEN VALUE2 THEN RESULT2} [ELSE DEFAULT_RESULT] ENDspa

  1. 雖然一個叫函數,一個叫表達式,但實際上兩者都在行爲上都很像 IF-ELSIF-ELSE 流程控制語句,會按書寫順序執行判斷,遇到符合條件的狀況則返回相應的值,後面的狀況涉及到的語句不會被執行(例如開銷較大的函數)
  2. 均可以省略默認值的(CASE 省略默認值的方式是不寫 ELSE 子句),若是省略默認值但又未找到匹配則返回 NULL;
  3. 均可以在 SQL 中任何須要「值」的地方使用;

實際上 DECODE 和 CASE-WHEN 仍是有一些差異的,我把本身知道的列在了下面,歡迎讀者補充!ci

  DECODE CASE-WHEN
適用數據庫 Oracle 專屬 SQL 標準
可用於 PL/SQL
特殊匹配邏輯 NULL 可與 NULL 匹配
(一般狀況下 NULL 不會與任何值相等,只能用 IS NULL 判斷)
如 CASE 後沒有表達式
可在 WHEN 和 THEN 中填寫任意條件表達式
返回值類型不一樣時 某個返回值在語句執行中實際返回時
向第一個返回值的類型隱式轉換
全部返回值在語句解析時
與第一個返回值類型保持一致
相關文章
相關標籤/搜索