본문 바로가기

프로그램/ORACLE

오라클 월별 주차 쿼리

반응형

인터넷에서 원래 있던 주차 쿼리를 제가 필요한 방식으로 수정한 쿼리입니다.

 

기본적으로 with 절을 써서 쿼리를 만들었습니다.

 

 

with TEST as (
select
week.*        
from(
select to_char(WEEK_START, 'YYYY-MM-DD') WEEK_START
,to_char(WEEK_END, 'YYYY-MM-DD') WEEK_END
,to_char(WEEK_START, 'WW') WEEK_OF_YEAR_ISO
,to_char(WEEK_START, 'W') WEEK_OF_MONTH
, case when to_char(WEEK_START, 'YYYYMM') = to_char(START_DT, 'YYYYMM') and to_char(WEEK_END, 'DD') < 7 then 1  
       when to_char(WEEK_START, 'YYYYMM') = to_char(END_DT, 'YYYYMM') and  mod(to_char(WEEK_END, 'DD') , 7) = 0 then to_char(WEEK_START, 'W') + 0   
       else to_char(WEEK_START, 'W')+1  end

from (
  select
  trunc(START_DT + LEVEL, 'D') WEEK_START
  ,trunc(START_DT + LEVEL, 'D') + 6 WEEK_END
  , START_DT
  , END_DT
  from (
    select to_date('20170719', 'YYYYMMDD') - 1 START_DT
    ,to_date('20170819', 'YYYYMMDD') END_DT from DUAL
      )
    connect by LEVEL <= END_DT - START_DT
    )
group by WEEK_START, WEEK_END, START_DT, END_DT order by week_start

) week
)
select rownum as WEEK_OF_YEAR ,a.* from TEST a


--select mod(14,7) from dual

 

 

-- 굵은 글씨의 날짜는 조회시 사용되는 입력 날짜 조건 입니다. 그리고 굵은 글씨의 케이스 문은 주차 로직을 수정한 부분입니다.

 

결과 캡쳐입니다. 저는 8월 1주차 부분을 8월이 시작되는 날짜를 기준으로 주차가 시작되도록 해서 사용하였습니다.

 


 

반응형