轉,Oracle——decode函數
阿新 • • 發佈:2017-10-16
一個 使用方法 () 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函數