오라클 특정 주수차 특정 요일에 해당하는 날짜 가져오기. 0 5 6,233

by 귀린 [SQL Query] [2015.09.07 15:36:35]


안녕하세요 

다름이 아니라 오라클 특정 주수차 특정 요일의 날짜를 가져오려 합니다.

예를 들면 매월 셋째수 수요일이 몇일 인지 가져오려 합니다.

2015년 9월의 경우 16일을 가져오려 합니다.

10월로 넘어갈  경우는 14일을 가져오는 쿼리를 짜는데 잘 안되네요..ㅠㅠ

도움 및 조언좀 부탁드립니다.

by 낭만캐치 [2015.09.07 15:54:01]
1
2
3
4
5
6
7
8
9
10
WITH T AS (
 SELECT TO_DATE(:referencedate, 'YYYYMMDD') dt 
    FROM (SELECT :referencedate YYYYMMDD FROM  dual)
 WHERE TO_CHAR(TO_DATE(YYYYMMDD, 'YYYYMMDD'), 'ddd') <= TO_CHAR(TO_DATE(YYYYMMDD, 'YYYYMMDD'), 'ddd')
)
SELECT dt as "입력일"
          , CEIL((dt - TRUNC(TRUNC(dt, 'MM'), 'IW') -4 ) / 7)  ||'주차'  "입력일의 주차"
          , CASE WHEN TO_CHAR(TO_DATE(:referencedate,'YYYYMMDD'), 'D') < 4 THEN TRUNC(TO_DATE(:referencedate,'YYYYMMDD')+4, 'IW')+2
            ELSE TRUNC(TO_DATE(:referencedate,'YYYYMMDD'), 'IW' )+2 END "입력일의 그주 수요일" --해당 날짜의 주중 수요일         
FROM T

 


by 낭만캐치 [2015.09.07 15:55:49]
1
2
--간단하게 해당주 수요일의 날짜 구하는 방법입니다
SELECT TRUNC(SYSDATE, 'IW')+2 FROM DUAL

 


by 마늘장아찌 [2015.09.07 15:55:37]

전월 마지막일에서 다음달 최초 수요일을 구한다음

2주를 plus하면 그달에서 3주차 수요일이 나오지 않을까 싶네요...

 

SELECT NEXT_DAY((to_date('201510', 'YYYYMM')-1), 4) + 14 FROM DUAL


by 마농 [2015.09.07 16:02:08]

주차에 대한 문제는 그 개념을 명확히 해야만 합니다.
 - 주의 기준이 (월~일) 인지? (일~토) 인지?
 - 3번째주 수요일인지? 3번째 수요일인지?


낭만캐치님의 경우엔 IW(월~일)기준 주차를 구하셨구요.
마늘장아찌님의 경우엔 3번째 수요일을 구하셨네요.
저는 d(일~토) 기준 3번째주 수요일을 구했습니다.

1
2
3
4
SELECT ym
     , TO_CHAR(TRUNC(TO_DATE(ym, 'yyyymm'), 'd') + 17, 'yyyymmdd') dt
  FROM (SELECT '201510' ym FROM dual)
;

 


by 귀린 [2015.09.14 10:11:55]

답변 감사드립니다. 혼자 해결해서 잘 안되었는데 잘 배워 갑니다. 감사합니다.

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