计算员工工作了多少年零多少月零多少天 是应该用 trunc( mod(mod(sysdate-hiredate,365),12) ) as days 获得天数,还是用trunc(mod(sysdate-hiredate,30)) as days 呢?两个执行出来的结果是不一样的,第一个式子在除以365取余后,又除以12取余不理解啊,怎么是除以12啊?

解决方案 »

  1.   


    --计算月差 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
      

  2.   

    刚看懂  应该是后面一个 内层mod(sysdate-hiredate,365) 是去掉整数年 剩余小1年的天数
    外层mod(*,30) 在小于1年的天数里面取余30 得到小于1个月的天数其实算出来也不是特别准确 有时候刚好那么几天 会产生一个月的误差ps:上面的复制错了 35改为25...
      

  3.   

    我的理解是这样的,用trunc(日期)就可以得到日期对应的天,后直接的相减就行了。