2011-08-03 38 views

回答

17

像這樣的事情

SQL> ed 
Wrote file afiedt.buf 

    select to_char(add_months(start_date, level-1), 'fmMonth') 
     from (select date '2011-03-30' start_date, 
        date '2011-06-29' end_date 
       from dual) 
    connect by level <= months_between(
          trunc(end_date,'MM'), 
          trunc(start_date,'MM')) 
    *      + 1 
SQL>/

TO_CHAR(ADD_MONTHS(START_DATE,LEVEL- 
------------------------------------ 
March 
April 
May 
June 

應該工作。

+1

嗨,賈斯汀,偉大的思想都一樣;) – APC

+0

+1。 「相似」,但你的 - 正如你所指出的 - 更好。 :D – APC

+1

嗯,即使是一隻盲松鼠也會偶然發現堅果。 –

1

您可以使用該功能MONTHS_BETWEEN

SELECT MOD(TRUNC(MONTHS_BETWEEN('2011-07-29', '2011-03-28')), 12) as MONTHS 
FROM DUAL 

輸出

MONTHS 
---------- 
     4 
+0

我需要幾個月的輸出,即。三月,四月,五月和六月。不是4. – Nitish

+0

對不起,我誤解了你的問題。你應該檢查賈斯汀洞穴的答案。它是正確的。 – bruno

1

幾天前我需要回答這個問題。我發現了另一個我更喜歡的解決方案:

select to_char(which_month, 'Mon-yyyy') month 
from 
(
    select 
     add_months(to_date(:start_date,'mm-yyyy'), rownum-1) which_month 
    from 
     all_objects 
    where 
     rownum <= months_between(to_date(:end_date,'mm-yyyy'), add_months(to_date(:start_date,'mm-yyyy'), -1)) 
    order by 
     which_month 
) 

你當然可以使用任何你想要的格式。我'團結起來並且總結了另一套,這樣即使他們沒有結果,我也能得到這些月份。

+0

讚賞,確切回答我想要的東西:) – John

1

要去添加此解決方案,只是因爲我認爲這是比別人更清潔:

SELECT ADD_MONTHS(TRUNC(TO_DATE('28-Mar-2011', 'DD-MON-YYYY'), 'MON'), ROWNUM - 1) date_out 
FROM DUAL 
CONNECT BY ADD_MONTHS(TRUNC(TO_DATE('28-Mar-2011', 'DD-MON-YYYY'), 'MON'), ROWNUM - 1) 
    <= TRUNC(TO_DATE('29-Jun-2011', 'DD-MON-YYYY'), 'MON') 
0
SELECT MIN (to_date((TO_CHAR (Actual_Date, 'DD-MM-RRRR')),'dd-mm-rrrr')) F_DATE, 
     MAX (to_date((TO_CHAR (Actual_Date, 'DD-MM-RRRR')),'dd-mm-rrrr')) T_DATE, 
     TO_CHAR (Actual_Date, 'MM-RRRR') TRX_MONTH  
    FROM ( SELECT TRUNC (TO_DATE (:P_FDATE, 'dd-mm-rrrr')) + LEVEL - 1 
         Actual_Date 
       FROM (SELECT TRUNC (TO_DATE (:P_FDATE, 'dd-mm-rrrr'), 'MM') - 1 
           AS dt 
         FROM DUAL) 
      CONNECT BY LEVEL <= 
         ( TO_DATE (:P_TDATE, 'dd-mm-rrrr') 
         - TRUNC (TO_DATE (:P_FDATE, 'dd-mm-rrrr')) 
         + 1)) 
GROUP BY TO_CHAR (Actual_Date, 'MM-RRRR') 
ORDER BY 1 
+0

請將您的代碼縮進4個空格以激活語法高亮顯示。另外,增加一些解釋性文字通常是值得讚賞的(特別是如果已經有了可接受的答案,請說出你的解決方案有什麼不同)。 – chtz

相關問題