월 주차별 시작 날짜 끝날짜 찾기 0 6 3,791

by 송민구 [SQL Query] [2014.12.30 15:21:45]


안녕하세요

간단한 쿼리 같은데 안되네요 ㅎ

한해 날짜별로 해당 날짜의 월주차, 시작날짜 끝날짜를 표시하고 싶습니다

예를 들면 아래와 같습니다. 

기준날짜   월주차  주시작날짜 주끝날짜

20141209  2  20141208 20141214

월주자는 'w' 로 찾으면 되는데 주의 시작과 끝날짜를 찾기가 애매합니다.

20141231경우는 20141229 ~ 20141231 처럼 표시되어야 하거든요

20150102 는 20150101 ~ 20150104 처럼 되어야 하는거죠 ㅎ 무조건 월요일 일요일은 아니고...

한방 쿼리 가능할까요

 

by 송민구 [2014.12.30 15:32:55]

윽 'w'도 월의 주차를 가져오지 못하네요 ㅜㅜ


by jkson [2014.12.30 16:00:24]

http://www.gurubee.net/article/64023#comment_121696 마농님 댓글이 힌트가 될 듯하네요.


by jkson [2014.12.30 16:06:40]

약간 다르네요;


by 마농 [2014.12.30 16:07:04]

'w' 는 요일과 상관없이 1일부터 7일까지가 1주차입니다.


'iw' 는 월요일 기준 요일을 나타내긴 합니다만 월기준이 아닌 년기준입니다.
월기준으로 나누어 떨어지지도 않으며
년의 경계에 있는 주는 전년도로 편입될수도 있고 내년도로 편입될수도 있습니다.(편입 기준 : 목요일)


2015년1월 첫주를 1일부터~4일까지로 정하고,
같은 주에 있는 2014년12월29일~31일까지는 12월의 마지막주로 나누어 구하고자 한다면?
별도로 계산식을 만들어 적용해야 합니다.


by 마농 [2014.12.30 16:07:42]
SELECT TO_CHAR(dt, 'yyyymmdd') dt 
     , TO_CHAR(dt, 'yyyymm') ym 
     , TRUNC((dt - TRUNC(TRUNC(dt, 'mm'), 'iw')) / 7) + 1 w
     , TO_CHAR(GREATEST(TRUNC(dt, 'mm'), TRUNC(dt, 'iw')  ), 'yyyymmdd') sdt
     , TO_CHAR(   LEAST(   LAST_DAY(dt), TRUNC(dt, 'iw')+6), 'yyyymmdd') edt
  FROM (SELECT dt + LEVEL - 1 dt
          FROM (SELECT TO_DATE('2014'||'01', 'yyyymm') dt FROM dual)
         CONNECT BY LEVEL <= ADD_MONTHS(dt, 12) - dt
        )
;

 


by 송민구 [2014.12.30 18:18:00]

마농님 정말 지리네요..ㄷㄷ

비슷하게 따라 간줄 알았는데 먼가 영 다르네요 ㅎ

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