WITH t1 AS ( SELECT '202017' AS week FROM dual ) , t2 AS ( SELECT TRUNC(TO_DATE(SUBSTR('202017', 1, 4), 'YYYY'), 'yy') + LEVEL - 1 dt FROM dual CONNECT BY LEVEL <= 365 ) SELECT b.week , b.dt , b.week_days FROM ( SELECT SUBSTR(week, 5) AS week FROM t1 ) a INNER JOIN ( SELECT dt , TRUNC(dt,'d')||' ~ '||(TRUNC(dt,'d') + 6) AS week_days , TRUNC((TRUNC(dt) - TRUNC(TRUNC(dt, 'yy'), 'd')) / 7) + 1 AS week FROM t2 ) b ON a.week = b.week ;
2020년 17주차라는게 어떤 기준으로 나온 주차인가요?
ISO 기준인가요?
- 주의 시작요일은 월요일
- 년도가 겹치는 주는 더 많은 연도를 포함하는 연도의 주차가 됨
- 예) 1월1일이 (월화수목)에 있으면 그 주는 1주차가 되고
- 예) 1월1일이 (금토일)에 있으면 그 주는 전년도 마지막 주차가 됨.
아니면 다른 기준일까요?
- 주의 시작일이 일요일이라던가?
- 1월1일은 무조건 1주차가 되어야 한다던가?
- 1월1일부터 1월7일까지가 1주차 라던가?
-- ISO 기준이라면? 2020년 17주차의 시작일은 4월20일 입니다. SELECT TO_CHAR(TO_DATE('20191229', 'yyyymmdd'), 'iyyy-iw') FROM dual; -- 2019-52 SELECT TO_CHAR(TO_DATE('20191230', 'yyyymmdd'), 'iyyy-iw') FROM dual; -- 2020-01 SELECT TO_CHAR(TO_DATE('20200419', 'yyyymmdd'), 'iyyy-iw') FROM dual; -- 2020-16 SELECT TO_CHAR(TO_DATE('20200420', 'yyyymmdd'), 'iyyy-iw') FROM dual; -- 2020-17 SELECT TO_CHAR(TO_DATE('20210101', 'yyyymmdd'), 'iyyy-iw') FROM dual; -- 2020-53 SELECT TO_CHAR(TO_DATE('20210103', 'yyyymmdd'), 'iyyy-iw') FROM dual; -- 2020-53 SELECT TO_CHAR(TO_DATE('20210104', 'yyyymmdd'), 'iyyy-iw') FROM dual; -- 2021-01
WITH T AS ( SELECT '202017' WEEK FROM DUAL ) SELECT WEEK , TO_CHAR(DT,'YYYY-MM-DD') DT , TO_CHAR(TRUNC(DT,'IW') ,'YYYY-MM-DD') ST_DT , TO_CHAR(TRUNC(DT,'IW')+6,'YYYY-MM-DD') ED_DT FROM (SELECT SUBSTR(WEEK,5,2) WEEK , TRUNC(TO_DATE(SUBSTR(WEEK),'YYYY'),'YY') + 7 * ( SUBSTR(WEEK,5,2) - 1 ) DT FROM T )