两个日期型字段,要求查询相差多少年,计算到月,不到日。
例如2009-11-01 - 2000-11-30 结果应该为9年
    2009-11-01 - 2000-12-30 结果应该为8年
sql 语句如何写多谢指教!

解决方案 »

  1.   

    SELECT MONTHS_BETWEEN 
       (TO_DATE('02-02-1995','MM-DD-YYYY'),
        TO_DATE('01-01-1995','MM-DD-YYYY') ) "Months"
        FROM DUAL;
      

  2.   

    select trunc(months_between(to_date('2009-11-01', 'yyyy-mm-dd'),
                                to_date('2000-11-30', 'yyyy-mm-dd')) / 12) Years,
           mod(trunc(months_between(to_date('2009-11-01', 'yyyy-mm-dd'),
                                    to_date('2000-11-30', 'yyyy-mm-dd'))),
               12) months
      from dual
      

  3.   

    select FLOOR((to_CHAR(TO_DATE('2009-11-01','YYYY-MM-DD'),'YYYYMM') - to_CHAR(TO_DATE('2000-12-30','YYYY-MM-DD'),'YYYYMM')) / 100) FROM DUAL
      

  4.   

    select trunc(months_between(trunc(date2,'MM'),trunc(date1,'MM'))/12) from 
      

  5.   

    最后结果取年 则直接 / 2取整,然后用floor函数select floor(months_between(date1,date2)/12) from dual;
      

  6.   

    不对?
    4楼的代码代入你题中的数据测试
    select trunc(months_between(trunc(date'2009-11-01','MM'),trunc(date'2000-11-30','MM'))/12) from dual;
    TRUNC(MONTHS_BETWEEN(TRUNC(DAT
    9
    select trunc(months_between(trunc(date'2009-11-01','MM'),trunc(date'2000-12-30','MM'))/12) from dual;
    TRUNC(MONTHS_BETWEEN(TRUNC(DAT
    8