날짜 관련 주차 관련해서 질문 드립니다. 0 3 1,014

by K-ART [SQL Query] [2017.05.29 22:26:18]


SELECT TO_DATE('20170601', 'yyyymmdd') dt FROM dual  <<< 입력시

                       월                 화                     수                        목                   금

 1주차           20170529       20170530            20170531             20170601            20170602

 2주차          20170605         20170606           20170607             20170608            20170609

 3주차           .

 4주차       

 5주차

 까지  구하고 싶습니다.

 

by jkson [2017.05.30 08:30:06]
select * 
  from
    (
    select to_char(dt + level - 1,'yyyymmdd') dt
         , ceil(level / 7)||'주차' "주차"
         , to_char(dt + level - 1,'d') dy
      from (select case when to_char(to_date(:in_dt, 'yyyymmdd'),'d') in ('1','7') then
                             to_date(:in_dt, 'yyyymmdd')
                        else trunc(to_date(:in_dt, 'yyyymmdd'),'d')
                   end dt
              from dual)
      where to_char(dt + level - 1,'d') not in ('1','7')
    connect by level <= case when to_char(last_day(to_date(:in_dt, 'yyyymmdd')),'d') in ('1','7') then 
                                  last_day(to_date(:in_dt, 'yyyymmdd'))
                             else next_day(last_day(to_date(:in_dt, 'yyyymmdd')),6)
                        end - dt + 1
    )
pivot (min(dt) for dy in (2 "월", 3 "화", 4 "수", 5 "목", 6 "금"))
order by "주차"

 


by 마농 [2017.05.30 08:30:54]
SELECT LEVEL w
     , TO_CHAR(s + LEVEL * 7 - 7, 'yyyymmdd') mon
     , TO_CHAR(s + LEVEL * 7 - 6, 'yyyymmdd') tue
     , TO_CHAR(s + LEVEL * 7 - 5, 'yyyymmdd') wed
     , TO_CHAR(s + LEVEL * 7 - 4, 'yyyymmdd') thu
     , TO_CHAR(s + LEVEL * 7 - 3, 'yyyymmdd') fri
  FROM (SELECT TRUNC(TRUNC(dt, 'mm') + 2, 'iw') s
             , TRUNC(LAST_DAY(dt), 'iw') e
          FROM (SELECT TO_DATE('20170601', 'yyyymmdd') dt FROM dual)
        )
 CONNECT BY LEVEL <= (e - s) / 7 + 1
;

 


by jkson [2017.05.30 08:59:12]

ㅇㅎㅎ 깔끔하네요~ 저는 너무 무식하게 풀었네요 ㅠ

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