일자 관련 쿼리문의드립니다. 1 5 300

by DB초보자입니다 [SQL Query] [2022.01.26 21:30:02]


안녕하세요 선배님들

얼마전에 비슷한 문의를 드려 마농님께서 좋은 답변주셔서 정말 잘 사용하고있습니다!

이번에도 해당쿼리를이용해 이것저것 해보려고 했더니 쉽지않아 문의드립니다.

구현하고자하는 내용은 아래와 같습니다.

2022-09-01~ 2022-09-30일 중에

평일인경우

2022-09-01 19:00 ~2022-09-02 07:00

까지의 데이터를 조회하고

금요일의 경우는(금요일~월요일)

09-02 19:00~09-05 07:00까지의 데이터를 조회하려고합니다.

위의 쿼리는 어느정도 구현을 해서 작성을 해놨는데 연휴가 있는경우 쿼리늘 도통 어찌해야될지 모르겠더라구요

명절(명절시작일부터 명절끝나는 평일)

09-08 19:00~ 09-13 07:00까지의 데이터를 조회하고싶습니다ㅠㅠ

변수로는 2022-09를 대입하면

예상하는 쿼리의 모양은(휴일은 테이블에 별도로 관리하고있습니다)

시작 종료
2022-09-01 19:00 2022-09-02 07:00
2022-09-02 19:00 2022-09-05 07:00
연휴 연휴
2022-09-08 19:00 2022-09-13 07:00

이런식입니다

by 마농 [2022.01.27 08:30:20]
WITH holiday AS
(
SELECT '2022-01-01' dt, '양력설' nm FROM dual
UNION ALL SELECT '2022-01-31', '설날전'     FROM dual
UNION ALL SELECT '2022-02-01', '설날'       FROM dual
UNION ALL SELECT '2022-02-02', '설날후'     FROM dual
UNION ALL SELECT '2022-03-01', '삼일절'     FROM dual
UNION ALL SELECT '2022-03-09', '대통렬선거' FROM dual
UNION ALL SELECT '2022-05-01', '근로자의날' FROM dual
UNION ALL SELECT '2022-05-05', '어린이날'   FROM dual
UNION ALL SELECT '2022-05-08', '석가탄신일' FROM dual
UNION ALL SELECT '2022-06-01', '지방선거'   FROM dual
UNION ALL SELECT '2022-06-06', '현충일'     FROM dual
UNION ALL SELECT '2022-08-15', '광복절'     FROM dual
UNION ALL SELECT '2022-09-09', '추석전'     FROM dual
UNION ALL SELECT '2022-09-10', '추석'       FROM dual
UNION ALL SELECT '2022-09-11', '추석후'     FROM dual
UNION ALL SELECT '2022-09-12', '추석대체'   FROM dual
UNION ALL SELECT '2022-10-03', '개천절'     FROM dual
UNION ALL SELECT '2022-10-09', '한글날'     FROM dual
UNION ALL SELECT '2022-10-10', '한글날대체' FROM dual
UNION ALL SELECT '2022-12-25', '성탄절'     FROM dual
)
, calendar AS
(
SELECT ym
     , TO_DATE(ym, 'yyyy-mm') + LEVEL - 1 dt
  FROM (SELECT '2022-09' ym FROM dual)
 CONNECT BY LEVEL <= 40
)
SELECT *
  FROM (SELECT a.ym
             , TO_CHAR(a.dt, 'yyyy-mm-dd "19:00"') sdt
             , LEAD(TO_CHAR(a.dt, 'yyyy-mm-dd "07:00"')) OVER(ORDER BY a.dt) edt
          FROM calendar a
          LEFT OUTER JOIN holiday b
            ON b.dt = TO_CHAR(a.dt, 'yyyy-mm-dd')
         WHERE TO_CHAR(a.dt, 'd') NOT IN ('1', '7')
           AND b.dt IS NULL
        )
 WHERE sdt LIKE ym || '%'
;

 


by DB초보자입니다 [2022.01.27 09:19:44]

정말 두번씩이나 감사드립니다ㅠㅠ

어찌 보답 할 수있는 방법이 없을까요??


by jkson [2022.01.27 09:48:55]

후원 계좌 공개?ㅋ


by DB초보자입니다 [2022.01.27 10:11:25]

후원계좌 오디나와있니요!!!

그리고 대댓글 어찌다나용ㅠㅠ


by 마농 [2022.01.27 10:47:55]

댓글 우측에 [답변] 버튼 있습니다.
혹시 안보이면 버그게시판에 글 올리세요.
사용하시는 브라우저가 뭔지?

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