안녕하세요.
휴가 기간 중복 체크를 해야 하는데 머리가 하얗습니다.. 도움주시면 감사하겠습니다!
WITH VACA AS
(
SELECT '20240217' start_date, 'N' pm_half_yn, '20240218' end_date, 'Y' am_half_yn FROM dual
)
SELECT count(*) dup_cnt
FROM VACA
WHERE start_date <= '20240220'
and end_date >= '20240218'
기존에는 VACA 테이블에 이렇게 있으면 기간으로만 체크했었는데 반차까지 체크를 해서 중복카운트가 나오지 않았으면 합니다.!
db : 20240217 반차없음 ~ 20240218 오전반차(am_half_yn = 'Y')
입력 : 20240218 오후반차(pm_half_yn = 'Y') ~ 20240220 반차없음
이 경우에는 중복 카운트가 안 나왔으면 하는데 어떻게 해야할까요..?
WITH vaca AS ( SELECT '20240217' start_date, 'N' pm_half_yn, '20240218' end_date, 'Y' am_half_yn FROM dual ) SELECT COUNT(*) dup_cnt FROM vaca , (SELECT '20240218' sdt, 'Y' pyn , '20240220' edt, 'N' ayn FROM dual ) WHERE start_date <= edt AND end_date >= sdt AND start_date || DECODE(pm_half_yn, 'N', 'A', 'P') <= edt || DECODE(ayn, 'Y', 'A', 'P') AND end_date || DECODE(am_half_yn, 'Y', 'A', 'P') >= sdt || DECODE(pyn, 'N', 'A', 'P') ;