转,Oracle——decode函数

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
posted @ 2017-10-16 14:33  Queenayao  阅读(290)  评论(0编辑  收藏  举报