経過した月だけを取得したいので、2月には1月だけが返され、12月には1月から11月に返されます。
これにより、現在の年のすべての月が返されます。
Select TO_CHAR( ADD_MONTHS( TRUNC(SYSDATE,'year') , LEVEL-1 ), 'YYYY-MM' ) Month
FROM dual
CONNECT BY LEVEL <= 12;
返される行数を調整する必要があります。これは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')))
少し単純なバージョン:
select add_months(trunc(sysdate,'YYYY'), level-1)
from dual
connect by level < to_char(sysdate,'MM');
または、間隔とANSIEXTRACT()
関数を使用したい場合(これにより、使用の暗黙的な変換が回避TO_CHAR(SYSDATE, 'MM')
されます。これは、このクエリの実行速度に影響を与えることはありません)。
SELECT TRUNC(SYSDATE, 'YEAR') + NUMTOYMINTERVAL(LEVEL - 1, 'MONTH')
FROM dual
CONNECT BY LEVEL < EXTRACT(MONTH FROM SYSDATE);