기간 중복체크 방법 질문 0 5 9,611

by 김성호 [SQL Query] [2016.07.26 14:57:11]


테이블에 String으로 된 날짜 컬럼이 2개가 있습니다. (From - to 형식)

데이터가

Key From      To        acd  bcd
100 20160701  20160715  10   11
101 20160725  20160728  10   11

라고 있을때

다음 입력때 아래와 같이 From - To 기간을 중복 입력하면 쿼리로 체크하여

입력이 되지 않게 하려고 합니다.

100 20160710  20160717  10   11

 

 아무리 머리를 굴려도 방법이 생각이 나지 않습니다. ㅠ

고수님의 도움 부탁드립니다.

by 우리집아찌 [2016.07.26 15:23:59]
WITH T ( SKey, FrDt, ToDt , acd ,bcd ) AS (
SELECT '100' , '20160701' , '20160715' , '10' , '11' FROM DUAL UNION ALL
SELECT '100' , '20160801' , '20160815' , '10' , '11' FROM DUAL UNION ALL
SELECT '101' , '20160725' , '20160728' , '10' , '11' FROM DUAL
)
 
 SELECT COUNT(*) 
  FROM T
 WHERE SKey = '100' 
   AND (
        ( '20160710' BETWEEN FrDt AND ToDt )
        OR
        ( '20160728' BETWEEN FrDt AND ToDt )
      )
   ;


    

 


by 마농 [2016.07.26 15:46:08]

입력 시작 종료가 기존 시작 종료를 포함할 경우 체크 누락됨.


by 마농 [2016.07.26 15:43:46]
-- 시작과 종료를 서로 교차하여 비교하면 됩니다.
SELECT *
  FROM t
 WHERE key = :v_key
   AND fr_dt < :v_to_dt
   AND to_dt > :v_fr_dt
;
-- 부등호 조건에 이퀄(=)을 포함시킬지는 업무 요건에 따라 결정하세요.

 


by 김성호 [2016.07.26 15:52:25]

저는 왜 이 방법을 몰랐을까요 ...

감사합니다.


by 우리집아찌 [2016.07.27 08:57:45]

저도 ... ㅡㅡ;

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