需求:表A AAC001     ALC034
  0001     2011-06-25
  0002     2011-05-25
需要查询的结果是,将ALC034与当前日期进行比如,将相差的月份罗列出来。假设今日为2011-08-24,期望得到的结果集如下: AAC001    ******
  0001     2011-07
  0001     2011-08
  0002     2011-06
  0002     2011-07
  0002     2011-08

解决方案 »

  1.   

    -- 求两个日期之间的月份差用函数 months_between,例如:scott@TBWORA> select empno, ename, sysdate curdate, hiredate, months_between(sysdate,hiredate) from emp;     EMPNO ENAME                CURDATE    HIREDATE   MONTHS_BETWEEN(SYSDATE,HIREDATE)
    ---------- -------------------- ---------- ---------- --------------------------------
          7369 SMITH                2011/08/25 1980/12/17                       368.277535
          7499 ALLEN                2011/08/25 1981/02/20                       366.180761
          7521 WARD                 2011/08/25 1981/02/22                       366.116245
          7566 JONES                2011/08/25 1981/04/02                       364.761406
          7654 MARTIN               2011/08/25 1981/09/28                       358.922697
          7698 BLAKE                2011/08/25 1981/05/01                       363.793665
          7782 CLARK                2011/08/25 1981/06/09                         362.5356
          7788 SCOTT                2011/08/25 1987/04/19                       292.213019
          7839 KING                 2011/08/25 1981/11/17                       357.277535
          7844 TURNER               2011/08/25 1981/09/08                       359.567858
          7876 ADAMS                2011/08/25 1987/05/23                       291.083987
          7900 JAMES                2011/08/25 1981/12/03                       356.729148
          7902 FORD                 2011/08/25 1981/12/03                       356.729148
          7934 MILLER               2011/08/25 1982/01/23                       355.083987已选择14行。
      

  2.   


    [SYS@myorcl] SQL>WITH T1 AS
      2   (SELECT '0001' AAC001, DATE '2011-06-25' ALC034
      3      FROM DUAL
      4    UNION
      5    SELECT '0002' AAC001, DATE '2011-05-25' ALC034 FROM DUAL)
      6  SELECT AAC001, COLUMN_VALUE
      7    FROM T1,
      8         TABLE(CAST(MULTISET
      9                    (SELECT TO_CHAR(ADD_MONTHS(TRUNC(ALC034, 'mm'), LEVEL),
     10                                    'yyyy-mm')
     11                       FROM DUAL
     12                     CONNECT BY LEVEL <=
     13                                MONTHS_BETWEEN(TRUNC(SYSDATE, 'mm'),
     14                                               TRUNC(ALC034, 'MM'))) AS
     15                    SYS.ODCIVARCHAR2LIST));AAC0 COLUMN_VALUE
    ---- --------------------
    0001 2011-07
    0001 2011-08
    0002 2011-06
    0002 2011-07
    0002 2011-08[SYS@myorcl] SQL>
      

  3.   


    luoyoumou,这位朋友,谢谢你回复,但是你的结果不是我希望, 月份差我可以拿到,但是我的目的是把月份差,按照月份罗列出来
    如:一月和六月,相差5个月,我希望的结果是,2,3,4,5,6
    感谢你的解答