두날짜 사이에 휴일,주말을 제외한 시간 차이를 알고싶습니다
예를들면 20241018 14:30~ 202041021 15:30
두날짜 사이에 차이를 분으로만 나타내고 싶은데 어떻게 쿼리를 짜야되나여?
3시간째 짜보고 있는데 쉽지 않네여
* 주말 아닌 공휴일은 운영하시는 내용으로 추가 필요
SELECT
sdttm "시작일시", edttm "종료일시"
, sum(CASE WHEN TRUNC(sdttm) = gen_dt THEN (1 - (sdttm - gen_dt))*(24*60)
WHEN TRUNC(edttm) = gen_dt THEN (edttm - gen_dt)*(24*60)
ELSE (24*60) END ) AS "차이(분)"
FROM
(
SELECT
TO_DATE('20241018 14:30', 'YYYYMMDD HH24:MI') AS sdttm
,TO_DATE('20241021 15:30', 'YYYYMMDD HH24:MI') AS edttm
FROM dual
) tbl,
(
SELECT
TRUNC(TO_DATE('20241018 14:30', 'YYYYMMDD HH24:MI')) + LEVEL -1 AS gen_dt
, TO_CHAR(TO_DATE('20241018 14:30', 'YYYYMMDD HH24:MI') + LEVEL -1, 'D') AS yoil
FROM DUAL
CONNECT BY LEVEL <= TO_DATE('20241021 15:30', 'YYYYMMDD HH24:MI') - TO_DATE('20241018 14:30', 'YYYYMMDD HH24:MI') +1
) genTbl
WHERE genTbl.yoil NOT IN ('1','7')
댓글 달아주신 쿼리로 돌려보니 제가 원하는 값을 얻었네여
매우 감사합니다
달력 테이블을 하나 민들어 두고 조인하여 사용하세요.
일수가 아닌 시간 정보라면? 휴식시간은 따로 없는지?
WITH t_calendar AS
(
-- 달력 테이블 미리 만들어 두고 사용하세요.
SELECT dt
, CASE WHEN TO_CHAR(dt, 'yyyymmdd') IN ('20241003', '20241009') THEN 0
WHEN TO_CHAR(dt, 'd') IN ('1', '7') THEN 0
ELSE 1 END cnt
FROM (SELECT TO_DATE('202410', 'yyyymm') + LEVEL - 1 dt
FROM dual
CONNECT BY LEVEL <= 31
)
)
SELECT SUM(ROUND((LEAST(dt + 1, edt) - GREATEST(dt, sdt)) * cnt * 24 * 60)) minute_
FROM (SELECT TO_DATE('20241018 14:30', 'yyyymmdd hh24:mi') sdt
, TO_DATE('20241021 15:30', 'yyyymmdd hh24:mi') edt
FROM dual
) a
, t_calendar b
WHERE dt BETWEEN TRUNC(sdt) AND edt
;