码迷,mamicode.com
首页 > 数据库 > 详细

转,Oracle——decode函数

时间:2017-10-16 16:50:12      阅读:360      评论:0      收藏:0      [点我收藏+]

标签:日期   相减   ret   table   解释   bsp   class   acl   months   

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函数

标签:日期   相减   ret   table   解释   bsp   class   acl   months   

原文地址:http://www.cnblogs.com/yblogs/p/7676851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!