0

経過した月だけを取得したいので、2月には1月だけが返され、12月には1月から11月に返されます。

これにより、現在の年のすべての月が返されます。

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

3 に答える 3

2

返される行数を調整する必要があります。これは12CONNECT 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 に答える
2

少し単純なバージョン:

select add_months(trunc(sysdate,'YYYY'), level-1)
from dual
connect by level < to_char(sysdate,'MM');
于 2013-02-14T01:08:44.730 に答える
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 に答える