본문 바로가기

개발/DATABASE

[SQL] 조건절에서 기간, 시간 중복 체크

날짜와 시간을 선택했을 때 중복 되는 값이 있는지 체크하기 위한 조건

테이블에 들어있는 값

START_DATE 시작일자
START_TIME 시작시간
END_DATE 종료일자
END_TIME 종료시간

 

입력 값

IN_START_DATE 시작일자
IN_START_TIME 시작시간
IN_END_DATE 종료일자
IN_END_TIME 종료시간

 

시작일시에 01을 붙이고 종료일시에 00을 붙여 중복 체크

AND (
	CONCAT(START_DATE,START_TIME,'01') BETWEEN CONCAT(IN_START_DATE,IN_START_TIME,'01') AND CONCAT(IN_END_DATE,IN_END_TIME,'00')
    OR
    CONCAT(END_DATE,END_TIME,'00') BETWEEN CONCAT(IN_START_DATE,IN_START_TIME,'01') AND CONCAT(IN_END_DATE,IN_END_TIME,'00')
    OR
    CONCAT(IN_START_DATE,IN_START_TIME,'01') BETWEEN CONCAT(START_DATE,START_TIME,'01') AND CONCAT(END_DATE,END_TIME,'00')
    OR
    CONCAT(IN_END_DATE,IN_END_TIME,'00') BETWEEN CONCAT(START_DATE,START_TIME,'01') AND CONCAT(END_DATE,END_TIME,'00')
   )

 

IN_으로 중복 체크를 한 것을 보면 function이나 procedure에서 중복체크를 하기위해 만들어 썼던 것 같다.