Oracle中Decode 函式使用

2021-08-30 19:56:17 字數 1798 閱讀 1730

decode函式是oracle pl/sql是功能強大的函式之一.decode有什麼用途呢?先構造乙個例子,假設我們想給職員加工資,其標準是:工資在8000元以下的將加20%;工資在8000元以上的加15%,通常的做法是,先選出記錄中的工資字段值? select salary into var-salary from employee,然後對變數var-salary用if-then-else或choose case之類的流控制語句進行判斷。如果用decode函式,那麼我們就可以把這些流控制語句省略,通過sql語句就可以直接完成。如下:

select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,salary) from employee是不是很簡潔?

decode的語法:

decode(value,if1,then1,if2,then2,if3,then3,……,else)
表示如果value 等於if1時,decode函式的結果返回then1,……,如果不等於任何乙個if值,則返回else。

初看一下,decode 只能做等於測試,但剛才也看到了,我們通過一些函式或計算替代value,是可以使decode函式具備大於、小於或等於功能。

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(預設值)

end if

例子二:用decode這個函式。在emp表下,查詢當工資大於2500的時候是a級;

工資小於2500和大於1500的時候是b級;

工資小於1500是c級;

實現:

select t.ename,t.sal,decode(sign(t.sal - 2500),1,'a',-1,(decode(sign(t.sal - 1500),1,'b',-1,'c'))) grade from emp t;
所得結果:

ename            sal grade

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

smith 800.00 c

allen 1700.00 b

ward 1350.00 c

jones 2975.00 a

martin 1350.00 c

blake 2950.00 a

clark 2450.00 b

scott 3000.00 a

king 5000.00 a

turner 1600.00 b

adams 1100.00 c

james 1050.00 c

ford 3000.00 a

miller 1300.00 c

使用方法:

1、比較大小select decode(sign(變數1-變數2),-1,變數1,變數2) from dual; ——取較小值sign()函式根據某個值是0、正數還是負數,分別返回0、1、-1

例如:變數1=10,變數2=20則sign(變數1-變數2)返回-1,decode解碼結果為「變數1」,達到了取較小值的目的。

Oracle 中 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 預設值...

Oracle 中 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 預設值...

Oracle 中 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 預設值...