日期:2014-05-17  浏览次数:20499 次

如何计算两个时间参数之间的年,月,天 的差数?
to_number(to_char(sysdate,'yyyy')) - to_number(to_char(day1,'yyyy')) as yeardel ,
to_number(to_char(sysdate, 'mm'))   -   to_number(to_char(day1, 'mm')) as mothdel,
to_number(to_char(sysdate, 'dd'))   -   to_number(to_char(day1, 'dd')) as daydel 

这样是年月日,分开来相减的,这样减出来后,月和日 可能有负数,所以还得判断。假如day1的值为2008-12-3 则结果是 年3,月-1,日4  而不是 年2,月11,日4  
 所以想用其他的办法.
trunc((months_between(trunc(sysdate,'dd'), day1))/12) as year  这样,结果是单纯的年,并且是正确的年.我想用这种类似的函数计算出月和日.   可是不知道怎么使用函数??

------解决方案--------------------
你可以用绝对值函数嘛。
------解决方案--------------------
看看这里 自己定义oracel里的datediff函数
http://sarsea456.blog.163.com/blog/static/93153620201062744412925/
------解决方案--------------------
月数差:


with temp as(
select to_date('2006-05-01','yyyy-mm-dd') time2,to_date('2009-06-08','yyyy-mm-dd') time1 from dual
union all
select to_date('2008-12-01','yyyy-mm-dd') time2,to_date('2010-02-10','yyyy-mm-dd') time1 from dual
)
select case when to_number(to_char(time1,'MM')) - to_number(to_char(time2,'MM')) >= 0 
then to_number(to_char(time1,'MM')) - to_number(to_char(time2,'MM'))
else to_number(to_char(time1,'MM'))+12 - to_number(to_char(time2,'MM')) + 1
end 相差月数
 from temp