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...