sql语句中用trunc((months_between(trunc(date1,'mmm'),trunc(date3,'mm')))/12)计算相差多少年,返回的结果为:17年0月
13年1月
28年3月以前都只返回
17
13
28哪位大侠指点一下

解决方案 »

  1.   

    这种方法计算年不准,months_between本来就是天数差值除以31得到的月份数,本来就是一个小数了。如果还用trunc来操作,很容易造成365天的差值,但是结果是不到12个月,而变成年份为0。
    如果是只需要年份的差值,可以TO_CHAR(date1,'YYYY')-TO_CHAR(date2,'YYYY');
    如果是要用天数来计算,可能会比较麻烦了。
      

  2.   

    为啥我这边测试返回都是数字,而不是XX年XX月的格式?最外层trunc函数返回的也是数字啊
      

  3.   

    select floor(months_between(sysdate,to_date('2007-02-02','yyyy-mm-dd'))/12) from dual;
      

  4.   

    检查你的NLS
    客户端是中文的吧