2011-08-10 51 views

回答

6

嘗試

where to_date(year || month, 'YYYYMM') 
     between add_months(trunc(sysdate, 'MM'), -8) and trunc(sysdate) 
3

試試這個:

SELECT * 
    FROM myTable 
WHERE (year, month) IN 
(
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -level), 'RRRR') AS year, 
    TO_CHAR(ADD_MONTHS(SYSDATE, -level), 'MM') AS month 
    FROM dual 
    CONNECT BY LEVEL < 8 
) 

另一個版本:

SELECT * 
    FROM myTable 
WHERE year||month IN 
(
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -level), 'RRRRMM') AS yearmonth 
    FROM dual 
    CONNECT BY LEVEL < 8 
) 
+0

這些都沒有得到七月。他們正在回到六月到十二月。 – Muhd

+0

@Cyber​​nate - 我相信你想在你的ADD_MONTHS調用中消除-1,並在你的CONNECT BY中執行<= 8。這將返回2010年12月至2011年7月。 –

+0

@Muhd賈斯汀:我的壞..刪除-1 – Chandu

0

我能想到的最好的是這樣的:

SELECT * FROM table WHERE (MONTH || YEAR) IN ('012011','122010', et cetera) 

這是一個強制的方法,所以不是如果你想讓你的查詢一般化,這是可行的。

相關問題