我想只获得已经过去的月份,所以在2月份它只会返回1月份,12月份将会返回1月至11月。
这将返回当年的所有月份。
Select TO_CHAR( ADD_MONTHS( TRUNC(SYSDATE,'year') , LEVEL-1 ), 'YYYY-MM' ) Month
FROM dual
CONNECT BY LEVEL <= 12;
答案 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);