1. 程式人生 > >轉,Oracle——decode函數

轉,Oracle——decode函數

一個 使用方法 () oracl text 其他 turn 返回結果 edate

decode()函數簡介: 主要作用:將查詢結果翻譯成其他值

使用方法:

Select decode(columnname,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,缺省值)

From talbename

Where …

其中columnname為要選擇的table中所定義的column,

·含義解釋:

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

註:其中缺省值可以是你要選擇的column name 本身,也可以是你想定義的其他值,比如Other等,也可以省略;

例子:

顯示雇員姓名、年限工資(以New Salary作為列標題)。年限工資的計算方法:從受雇日期起至今滿10年的,工資增加10%;滿20年的,工資增加20%,滿30年的,工資增加30%;其他的不變。

  select ename,decode(trunc(months_between(sysdate,hiredate)/120,0),1,sal*1.1,2,sal*1.2
,3,sal*1.3,sal) as "New Salary" from emp;

補充:

在Oracle中計算兩個日期間隔的天數、月數和年數:

一、天數:

在Oracle中,兩個日期直接相減,便可以得到天數;

select sysdate-to_date(2017-10-15,yyyy-mm-dd) from dual;
返回結果:1.6...(加上了小時)

二、月數:

計算月數,需要用到months_between函數;

1 --months_between(date1,date2)   
2 --如果兩個日期中“日”相同,或分別是所在月的最後一天,那麽返回的結果是整數。否則,返回的結果將包含一個分數部分(以31天為一月計算) 
3 select months_between(to_date(02/28/2015,mm/dd/yyyy),to_date(12/31/2014,mm/dd/yyyy)) "MOTHS" from dual; 4 返回結果: 2 5 select months_between(to_date(01/01/2015,mm/dd/yyyy),to_date(12/31/2014,mm/dd/yyyy)) "MONTHS" FROM DUAL; 6 返回結果: 0.032258064516129

三、年數:

計算年數,是通過計算出月數,然後再除以12;

1 select trunc(months_between(to_date(08/06/2015‘,mm/dd/yyyy‘),to_date(08/06/2013‘,mm/dd/yyyy‘))/12) from dual;
2 
3 --返回結果:2

轉,Oracle——decode函數