如何从DUAL获得本年度的所有过去几个月?

时间:2013-02-13 18:40:00

标签: sql oracle plsql

我想只获得已经过去的月份,所以在2月份它只会返回1月份,12月份将会返回1月至11月。

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

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

3 个答案:

答案 0 :(得分:2)

您只需要调整返回的行数,该行数由12子句中的CONNECT 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')))

答案 1 :(得分:2)

稍微简单的版本:

select add_months(trunc(sysdate,'YYYY'), level-1)
from dual
connect by level < to_char(sysdate,'MM');

答案 2 :(得分:0)

或者如果想要使用interval和ANSI EXTRACT()函数(这可以避免使用TO_CHAR(SYSDATE, 'MM')的隐式转换 - 而不是它影响此查询以任何方式运行的速度) :

 SELECT TRUNC(SYSDATE, 'YEAR') + NUMTOYMINTERVAL(LEVEL - 1, 'MONTH')
   FROM dual
CONNECT BY LEVEL < EXTRACT(MONTH FROM SYSDATE);