计算员工工作了多少年零多少月零多少天 是应该用 trunc( mod(mod(sysdate-hiredate,365),12) ) as days 获得天数,还是用trunc(mod(sysdate-hiredate,30)) as days 呢?两个执行出来的结果是不一样的,第一个式子在除以365取余后,又除以12取余不理解啊,怎么是除以12啊?
--计算月差 months_between() select trunc(months_between(to_date('2013-03-02','yyyy-mm-dd') , to_date('2012-01-10','yyyy-mm-dd'))) m from dual
m -------------- 1 35--计算年差 月差/12 select trunc(months_between(to_date('2013-03-02','yyyy-mm-dd') , to_date('2011-01-10','yyyy-mm-dd'))/12) y from dual y -------------- 1 2
--计算月差 months_between()
select trunc(months_between(to_date('2013-03-02','yyyy-mm-dd') , to_date('2012-01-10','yyyy-mm-dd'))) m
from dual
m
--------------
1 35--计算年差 月差/12
select trunc(months_between(to_date('2013-03-02','yyyy-mm-dd') , to_date('2011-01-10','yyyy-mm-dd'))/12) y
from dual y
--------------
1 2
外层mod(*,30) 在小于1年的天数里面取余30 得到小于1个月的天数其实算出来也不是特别准确 有时候刚好那么几天 会产生一个月的误差ps:上面的复制错了 35改为25...