原創 decode函式的感悟

2021-06-20 21:22:21 字數 2275 閱讀 3356

decode函式是oracle pl/sql是功能強大的函式之一,目前還只有oracle公司的sql提供了此函式,其他資料庫廠商的sql實現還沒有此功能。decode函式相當於一條件語句(if).它將輸入數值與函式中的引數列表相比較,根據輸入值返回乙個對應值。如果未能與任何乙個實參匹配成功,則函式也有預設的返回值。

在邏輯程式設計中,經常用到if – then –else 進行邏輯判斷。在decode的語法中,實際上就是這樣的邏輯處理過程。它的類似語法如下:

decode(value, if(a), then, if(b),then, . . . else )

value 代表某個表的任何型別的任意列或乙個通過計算所得的任何結果。當每個value值被測試,如果value的值為if1,decode 函式的結果是then1;如果value等於if2,decode函式結果是then2;等等。事實上,可以給出多個if/then 配對。如果value結果不等於給出的任何配對時,decode 結果就返回else 。

需要注意的是,這裡的if、then及else 都可以是函式或計算表示式。

下面來看乙個例子:

scott使用者下的emp表中的sal一列記錄了員工的工資:

select  empno ,ename,sal from emp;

empno 

ename 

sal----- 

---------- 

---------

7369 

smith 

800.00

7499 

allen 

1600.00

7521 

ward 

1250.00

7566 

jones 

2975.00

7654 

martin 

1250.00

7698 

blake 

2850.00

7782 

clark 

2450.00

7839 

king 

5000.00

7844 

turner 

1500.00

7876 

adams 

1100.00

7900 

james 

950.00

7902 

ford 

3000.00

7934 

miller 

1300.00

現在想要對工資進行分級,情況如下:

級別 工資 

1  0~1000 

2  1001~2000 

3  2001~5000 

4  5000以上 

現在用decode來實現:

select empno,ename ,sal, decode(sign(sal-0),1,decode(sign(1001-sal),1,1,-1,decode(sign(2001-sal),1,2,-1,decode(sign(5001-sal),1,3,-1,4))))

grade from emp;

empno ename 

sal 

grade

----- ---------- --------- ----------

7369 smith 

800.00 

17499 allen 

1600.00 

27521 ward 

950.00 

17566 jones 

2975.00 

37654 martin 

950.00 

17698 blake 

2850.00 

37782 clark 

1950.00 

27839 king 

5000.00 

37844 turner 

1500.00 

27876 adams 

800.00 

17900 james 

950.00 

17902 ford 

3000.00 

37934 miller 

1000.00  1

注:decode函式的判斷部分只是是值或者表示式且不能為判斷表示式,所以這裡判斷範圍用到了sig函式。級別如果比較多,這個decode就會變得非常臃腫,所以這個例子並不典型和簡單。但對於條件部分的理解卻是很重要。後面then部分與if部分類似,也是不能有判斷表示式,賦值表示式,只要知道它是返回值就好理解了。

decode函式的用法

含 釋 decode 條件,值1,翻譯值1,值2,翻譯值2,值n,翻譯值n,預設值 該函式的含義如下 if 條件 值1 then return 翻譯值1 elsif 條件 值2 then return 翻譯值2 elsif 條件 值n then return 翻譯值n else return 預設值...

DECODE函式的使用

decode函式是oracle pl sql是功能強大的函式之一,目前還只有oracle公司的sql提供了此函式,其他資料庫廠商的sql實現還沒有此功能。decode有什麼用途呢?先構造乙個例子,假設我們想給智星職員加工資,其標準是 工資在8000元以下的將加20 工資在8000元以上的加15 通常...

decode函式的用法

decode的作用當字段或字段的運算的值等於值1時,該函式返回值2,否則返回值3 含 釋 decode 條件,值1,返回值1,值2,返回值2,值n,返回值n,預設值 該函式的含義如下 if 條件 值1 then return 翻譯值1 elsif 條件 值2 then return 翻譯值2 els...