转,Oracle——decode函数

Posted Queenayao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转,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

以上是关于转,Oracle——decode函数的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Decode()函数和CASE语句的比较

oracle里nvl,to_char,decode这些函数怎么用啊?

oracle纵向数据变横向

oracle to_char 语法

decode函数的用法法请教

(转)Oracle 知识日常积累