0

我只想得到过去的几个月,所以说在二月它只会在一月返回,在十二月它会在一月到十一月返回。

这将返回当年的所有月份。

 Select TO_CHAR( ADD_MONTHS( TRUNC(SYSDATE,'year') , LEVEL-1  ), 'YYYY-MM' ) Month
     FROM   dual
     CONNECT BY LEVEL <= 12;
4

3 回答 3

2

稍微简单的版本:

select add_months(trunc(sysdate,'YYYY'), level-1)
from dual
connect by level < to_char(sysdate,'MM');
于 2013-02-14T01:08:44.730 回答
2

您只需要调整由12inCONNECT BY子句控制的返回行数。像这样的东西应该工作

 Select TO_CHAR( ADD_MONTHS( TRUNC(SYSDATE,'year') , LEVEL-1  ), 'YYYY-MM' ) Month
   FROM dual
CONNECT BY LEVEL <= floor( months_between( sysdate, trunc(sysdate,'YYYY')))
于 2013-02-13T18:51:02.297 回答
0

或者,如果想使用间隔和 ANSIEXTRACT()函数(这避免了使用的隐式转换TO_CHAR(SYSDATE, 'MM')——并不是说它会以任何方式影响此查询的运行速度):

 SELECT TRUNC(SYSDATE, 'YEAR') + NUMTOYMINTERVAL(LEVEL - 1, 'MONTH')
   FROM dual
CONNECT BY LEVEL < EXTRACT(MONTH FROM SYSDATE);
于 2015-02-25T22:50:29.970 回答