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
)
;
답변 감사드립니다