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