안녕하세요
매월 특정 주수차 요일을 구해야 하는데 어렵네요..
월~일 아니라 일~토 기준으로 해야 하는데 대부분이 월~일 기준이네요
예를 들면 매월 둘째주, 넷째주 화요일을 구해야 합니다
그럼 현재월 기준으론 6일, 20일이 되겠네요 다음달인 10월 기준으론 4, 18일이 되겠구요
어떻게 쿼리를 짜면 될지 도움을 구합니다
감사합니다!
-- 현재월 기준 / 2,4 주차 화요일 --
SELECT sysdate
, TRUNC(TRUNC(sysdate, 'mm'), 'd') + 3 + 6 tue_2
, TRUNC(TRUNC(sysdate, 'mm'), 'd') + 3 + 6 + 14 tue_4
FROM dual
;
-- 특정월 기준 / 2,4 주차 특정요일 --
SELECT ym
, TRUNC(ym, 'd') + dy + 6 tue_2
, TRUNC(ym, 'd') + dy + 6 + 14 tue_4
FROM (SELECT TO_DATE('202210', 'yyyymm') ym -- 연월
, 3 dy -- 요일(일월화수목금토 : 1234567)
FROM dual)
;
진심으로 감사드립니다!!!!
하나만 질문드려도 될까요?
두번째 쿼리인 특정월 특정요일 쿼리에서 6의 의미는 무엇인가요?
1, 3째주 인 경우도 고려해야 해서 보고 있는데 이해가 안되네요 ^^;;
6을 더한 것은
- 첫째 주 일주일의 마지막으로 이동하기 위한 것입니다.
- 거기에 요일에 해당하는 숫자를 더한 것입니다.
2,4주차는 말이 되지만. 1,3 주차는 말이 좀 안됩니다.
- 2주차 화요일은 무조건 존재하지만
- 1주차 화요일은 존재하지 않을 수 있습니다. (2022년 9월 1주차 화요일은?)
네 감사합니다
1주차에 없는 요일은 없는대로 있는 주차 요일만 가져오면 되는 거라서요
이리 저리 해보니 어쨌든 규칙은 만들 수 있겠더라구요
덕분에 해결되었습니다 정말 감사드립니다!!
아래 쿼리 참고해봤습니다.
SELECT NEXT_DAY( TRUNC( TRUNC( SYSDATE, 'MM' ), 'IW' ) - INTERVAL '1' DAY, 'TUESDAY' ) + 1 * INTERVAL '7' DAY AS tuesday2,
NEXT_DAY( TRUNC( TRUNC( SYSDATE, 'MM' ), 'IW' ) - INTERVAL '1' DAY, 'TUESDAY' ) + 3 * INTERVAL '7' DAY AS tuesday4
FROM DUAL;
https://stackoverflow.com/questions/58165836/return-date-value-from-nth-week-of-month-in-sql-developer-without-creating-funct
감사드립니다!! ^^
1. IW 는 월화수목금토일 기준입니다.
- 2022년 5월의 경우 일요일로 시작하는데 결과가 잘못 나오게 됩니다.
- IW 대신 D 를 사용해야 일월화수목금토 기준이 됩니다.
2. 'TUESDAY'를 사용한 것으로 보아
- 언어셋이 영어인듯 하네요.
- 한국어 설정에서는 오류가 나게 됩니다. '화요일' 로 바꿔야 함.
- 언어셋에 상관없이 동작하도록 'TUESDAY' 나 '화요일' 대신 숫자 3 을 이용하는게 좋을 듯 하네요.
마농님 말씀 감사합니다. 테스트한 환경이 영어라 당연하게 생각했네요.