특정 요일일 기준으로 입력된 기간동안 몇 주차인지 구하기

SELECT CASE
           WHEN sdate < TO_DATE (:s_date, 'YYYYMMDD') THEN TO_DATE (:s_date, 'YYYYMMDD')
           ELSE sdate
       END
           t1
     , CASE
           WHEN sdate + 6 > TO_DATE (:e_date, 'YYYYMMDD') THEN TO_DATE (:e_date, 'YYYYMMDD')
           ELSE sdate + 6
       END
           t2
     ,    CASE
              WHEN TO_NUMBER (TO_CHAR (TO_DATE (:s_date, 'YYYYMMDD'), 'D')) < 5 THEN TO_CHAR (sdate, 'MM')
              ELSE TO_CHAR (sdate + 6, 'MM')
          END
       || '월 '
       || TO_CHAR (TRUNC (sdate, 'IW') + 5, 'W')
       || '주차'
           AS ju
  FROM (    SELECT   TRUNC (TO_DATE (:s_date, 'YYYYMMDD'), 'IW')
                   - CASE
                         WHEN TO_NUMBER (TO_CHAR (TO_DATE (:s_date, 'YYYYMMDD'), 'D')) < 5 THEN 4
                         ELSE -3
                     END
                   + (LEVEL - 1) * 7
                       AS sdate
              FROM DUAL
        CONNECT BY LEVEL <= CEIL ( (TO_DATE (:e_date, 'YYYYMMDD') - TO_DATE (:s_date, 'YYYYMMDD') + 1) / 7));
오라클 클럽에 올라왔던 질문에 본인이 작성한 쿼리이다. 여기서는 목요일을 기준으로 한 주가 시작되는 것으로 작성하였다.

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다