转,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函数的主要内容,如果未能解决你的问题,请参考以下文章