http://www.gurubee.net/article/64023#comment_121696 마농님 댓글이 힌트가 될 듯하네요.
SELECT TO_CHAR(dt, 'yyyymmdd') dt , TO_CHAR(dt, 'yyyymm') ym , TRUNC((dt - TRUNC(TRUNC(dt, 'mm'), 'iw')) / 7) + 1 w , TO_CHAR(GREATEST(TRUNC(dt, 'mm'), TRUNC(dt, 'iw') ), 'yyyymmdd') sdt , TO_CHAR( LEAST( LAST_DAY(dt), TRUNC(dt, 'iw')+6), 'yyyymmdd') edt FROM (SELECT dt + LEVEL - 1 dt FROM (SELECT TO_DATE('2014'||'01', 'yyyymm') dt FROM dual) CONNECT BY LEVEL <= ADD_MONTHS(dt, 12) - dt ) ;