해당년도 12월월의 3주차 월요일 구하는 법 0 9 1,820

by 이종표 [SQL Query] [2014.12.09 14:39:52]


날짜 함수를 활용해서 구해보려는데.. 쉽지가 않네요.

 

질문 : 해당년도 12월월의 3주차 월요일 구하는 방법

ex) 2014년도 12월의 3주차 월요일은  2014/12/15

 

부탁합니다 .^^

by 마농 [2014.12.09 14:47:14]

주차의 개념정의가 우선입니다.
주차를 나누는 기준이 무었인지?
(일~토) 기준인지? (월~일) 기준인지? 또다른 기준인지?
12월을 예를 들었는데? 11월의 3주차는 언제부터 언제인지?
구하는게 3주차 월요일인지? 3번째 월요일인지?


by 이종표 [2014.12.09 14:53:55]

주차.. 달력기준으로

일~토 기준입니다...

3주차 월요일을 구하고자 합니다.


by 마농 [2014.12.09 15:14:10]

그럼 11월의 3주차 월요일은 11월10일이 되겠네요.

1주차 월요일은 아예 없는 날이 되는 거구요?


by 이종표 [2014.12.09 15:25:37]

일요일부터 시작하면..

11월의 3주차 월요일은 17일이 되는거 같은데요..


by jkson [2014.12.09 15:33:14]

헉; 11월 1일이 첫주 아닌가요?ㅠ


by 마농 [2014.12.09 15:34:42]

그러면 앞뒤가 안맞는거죠.
11월 2일부터가 1주차가 되는거네요.
11월 1일은 1주차도 아닌게 되는거죠.
반면에 12월은 월요일부터 시작하는 12/1일을 1주차로 보고 있네요.
같은 기준이라면 첫 일요일이 나오는 12월 7일이 첫주가 되야 하는거지요.
기준이 왔다 갔다 하고 있네요...
11월 10 일이 아닌 11월 17일을 원하는 거라면?
3주차 월요일이 아닌? 세번째 월요일을 원하시는 듯 하네요.

지금 원하는 데이터가 무엇인지 명확하게 정의하고 가야 합니다.


by jkson [2014.12.09 15:27:53]
WITH t AS
     (SELECT TO_DATE (:yyyymm || '01', 'YYYY-MM-DD') + LEVEL - 1 days
         , CEIL((TO_NUMBER(TO_CHAR(TRUNC (TO_DATE (:yyyymm || '01', 'YYYY-MM-DD')),'D')) - 1
           + TO_NUMBER(TO_CHAR(TO_DATE (:yyyymm || '01', 'YYYY-MM-DD') + LEVEL - 1,'DD')))/7 ) WEEK
        FROM DUAL
      CONNECT BY LEVEL <= to_number(to_char(last_day(TO_DATE (:yyyymm || '01', 'YYYY-MM-DD')),'DD')))
SELECT *
  FROM t 
 WHERE week = 3 --3째주
   AND TO_CHAR (days, 'd') = 2 --월요일

--11월 1일이 첫주라고 생각했을 때 쿼리인데 첫번째 일요일이 첫주가 된다면 조금 수정하시면 될 것 같아요. 저는 업무 때문에 이만..

by 마농 [2014.12.09 17:13:13]
SELECT ym
     , TO_CHAR(TRUNC(TO_DATE(ym, 'yyyymm'), 'd') + 1 + 14, 'yyyymmdd') dt1 -- 3주차 월요일
     , TO_CHAR(NEXT_DAY(TO_DATE(ym, 'yyyymm') -1, 2) + 14, 'yyyymmdd') dt2 -- 3번째 월요일
  FROM (SELECT '201411' ym FROM dual)
;

 


by jkson [2014.12.10 12:10:20]

역시 간단 명료! ㅎㄷㄷ;

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