본문 바로가기

Oracle

Oracle 주말 공휴일 제외 평일 구하기(WORKING DAY)

WORKING DAY를 구하기

(공휴일, 주말 제외 근무일수)

SELECT
    COUNT(1) WORKING_DAYS
    --*
FROM
    (
        SELECT
            TO_CHAR(start_dt + level - 1,'YYYYMMDD') dates,
            TO_CHAR(start_dt + level - 1,'D') d
        FROM
            (
                SELECT
                    TO_DATE('20200901','YYYYMMDD') AS start_dt,  --시작일자
                    TO_DATE('20201010','YYYYMMDD') AS end_dt     --종료일자
                FROM dual
            )
        CONNECT BY
            level <= end_dt - start_dt + 1
    ) a,	--시작,종료기간 일자를 구한다.
    (
        SELECT
            holiday_dt
        FROM sys_holiday
        WHERE holiday_dt BETWEEN '20200901' AND '20201010'	--시작,종료일자
    ) b	--공휴일테이블에서 기간을 구한다.
WHERE
    a.dates = b.holiday_dt (+)
    AND a.d NOT IN ('1', '7') --1: 일요일 7:토요일
    AND b.holiday_dt IS NULL
ORDER BY a.dates;

 

반응형