IW 주차 기준으로 작성했습니다.
- 일주일 : 월화수(목)금토일
- 일주일의 중앙인 목요일 기준 연도를 따름.
WITH t AS ( SELECT TO_DATE('20201224', 'yyyymmdd') + LEVEL dt FROM dual CONNECT BY LEVEL <= 20 ) SELECT dt , iyyy_iw_dy , DECODE(TO_CHAR(x, 'iw'), iw, x, x - 7) x_dt , TO_CHAR(DECODE(TO_CHAR(x, 'iw'), iw, x, x - 7), 'iyyy-iw-dy') x_iyyy_iw_dy FROM (SELECT dt , TO_CHAR(dt, 'iyyy-iw-dy') iyyy_iw_dy , TO_CHAR(dt, 'iw') iw , TRUNC(TRUNC(dt, 'iyyy') - 1, 'iyyy') + (TO_CHAR(dt, 'iw') - 1) * 7 + TO_CHAR(dt - 1, 'd') - 1 AS x FROM t ) ;
너무 어렵게 풀었네요.
쉽게 다시...
WITH t AS ( SELECT TO_DATE('20201224', 'yyyymmdd') + LEVEL dt FROM dual CONNECT BY LEVEL <= 20 ) SELECT dt , TO_CHAR(dt, 'iyyy-iw-dy') iyyy_iw_dy , dt - w x_dt , TO_CHAR(dt - w, 'iyyy-iw-dy') x_iyyy_iw_dy FROM (SELECT dt , DECODE(TO_CHAR(dt, 'iw'), TO_CHAR(dt-52*7, 'iw'), 52, 53) * 7 w FROM t ) ;