주차 관련 질문 있습니다 0 8 1,704

by nonono [Oracle 기초] 주차 [2020.07.23 20:52:56]


예를 들어 주차 202017 주차 (2020녀17주차)

 

202017 이걸로 해당 날짜 구할수있나요??

by 춘 [2020.07.23 22:35:14]
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
;

 


by nonono [2020.07.24 07:27:14]

감사합니다!!!


by 마농 [2020.07.24 09:07:06]

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

 


by 우리집아찌 [2020.07.24 09:34:41]

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
       )

 


by 마농 [2020.07.24 09:48:49]

ISO기준이라면?
2020년에는 1월1일이 1주차라서 결과가 맞게 나오지만.
2021년에는 1월1일이 1주차가 아니므로 결과가 틀르게 나오게 됩니다.


by 우리집아찌 [2020.07.24 17:04:24]

IOS 찾아봤는데.. 목요일 포함으로 주차가 차이가 나네요.


by 마농 [2020.07.24 11:12:33]
WITH t AS
(
SELECT '202017' iyyy_iw FROM dual
UNION ALL SELECT '202101' FROM dual
)
-- ISO 기준 : 연도주차(iyyyiw) -> 주시작일(yyyymmdd)
SELECT iyyy_iw
     , TRUNC(TO_DATE(SUBSTR(iyyy_iw, 1, 4)||'01', 'yyyymm') + 3, 'iw')
     + SUBSTR(iyyy_iw, 5) * 7 - 7 sdt
  FROM t
;

 


by 춘 [2020.07.24 21:40:04]

역시.

고수분들의 쿼리와 설명 많이 배우고 갑니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입