我只想得到过去的几个月,所以说在二月它只会在一月返回,在十二月它会在一月到十一月返回。
这将返回当年的所有月份。
Select TO_CHAR( ADD_MONTHS( TRUNC(SYSDATE,'year') , LEVEL-1 ), 'YYYY-MM' ) Month
FROM dual
CONNECT BY LEVEL <= 12;
稍微简单的版本:
select add_months(trunc(sysdate,'YYYY'), level-1)
from dual
connect by level < to_char(sysdate,'MM');
您只需要调整由12
inCONNECT 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')))
或者,如果想使用间隔和 ANSIEXTRACT()
函数(这避免了使用的隐式转换TO_CHAR(SYSDATE, 'MM')
——并不是说它会以任何方式影响此查询的运行速度):
SELECT TRUNC(SYSDATE, 'YEAR') + NUMTOYMINTERVAL(LEVEL - 1, 'MONTH')
FROM dual
CONNECT BY LEVEL < EXTRACT(MONTH FROM SYSDATE);