ORACLE 的 DECODE 函式詳細用法

2021-05-28 12:06:38 字數 3297 閱讀 1492

decode函式是oracle pl/sql是功能強大的函式之一,目前還只oracle公司的sql提供了此函式,其他資料庫廠商的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(條件,值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

· 使用方法:

1、比較大小

selectdecode(sign(變數1-變數2),-1,變數1,變數2) from dual; --取較小值

sign()函式根據某個值是0、正數還是負數,分別返回0、1、-1

例如:變數1=10,變數2=20

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

2、表、檢視結構轉化

現有乙個商品銷售表sale,表結構為:

month    char(6)      --月份

sell    number(10,2)   --月銷售金額

現有資料為:

200001  1000

200002  1100

200003  1200

200004  1300

200005  1400

200006  1500

200007  1600

200101  1100

200202  1200

200301  1300

想要轉化為以下結構的資料:

year   char(4)      --年份

month1  number(10,2)   --1月銷售金額

month2  number(10,2)   --2月銷售金額

month3  number(10,2)   --3月銷售金額

month4  number(10,2)   --4月銷售金額

month5  number(10,2)   --5月銷售金額

month6  number(10,2)   --6月銷售金額

month7  number(10,2)   --7月銷售金額

month8  number(10,2)   --8月銷售金額

month9  number(10,2)   --9月銷售金額

month10  number(10,2)   --10月銷售金額

month11  number(10,2)   --11月銷售金額

month12  number(10,2)   --12月銷售金額

結構轉化的sql語句為:

create or replace view

v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)

asselect

substrb(month,1,4),

sum(decode(substrb(month,5,2),'01',sell,0)),

sum(decode(substrb(month,5,2),'02',sell,0)),

sum(decode(substrb(month,5,2),'03',sell,0)),

sum(decode(substrb(month,5,2),'04',sell,0)),

sum(decode(substrb(month,5,2),'05',sell,0)),

sum(decode(substrb(month,5,2),'06',sell,0)),

sum(decode(substrb(month,5,2),'07',sell,0)),

sum(decode(substrb(month,5,2),'08',sell,0)),

sum(decode(substrb(month,5,2),'09',sell,0)),

sum(decode(substrb(month,5,2),'10',sell,0)),

sum(decode(substrb(month,5,2),'11',sell,0)),

sum(decode(substrb(month,5,2),'12',sell,0))

from sale

group by substrb(month,1,4);

例:select   decode   (col1,'1','11','2','22',0)   from   dual;   

解釋:如果為col1欄位為1時就返回值11,為2時返回值勤為22,其他的為0,你可以一直加的,成對匹配,最後乙個多餘的就是所有的其他情況!

Oracle函式 DECODE 函式

decode 函式,它將輸入數值與函式中的引數列表相比較,根據輸入值返回乙個對應值。函式的引數列表是由若干數值及其對應結果值組成的若干序偶形式。當然,如果未能與任何乙個實參序偶匹配成功,則函式也有預設的返回值。區別於sql的其它函式,decode函式還能識別和操作空值。語法 decode contr...

oracle中的decode函式

decode函式的用法解釋 1 decode 條件,a,b,c 相當於 if 條件 a then b else c 2 decode 條件,a,b,c d,e,f,g 相當於 if 條件 a then b else if 條件 c then d,else if 條件 e then f else g ...

oracle中的decode函式

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