OVERLAPS 술어
OVERLAPS 술어는 두 시간 기간의 오버랩 여부를 판별합니다. 시간 기간은 날짜 및 시간 표현식 쌍으로 지정됩니다(첫 번째 표현식은 기간의 시작을, 두 번째 표현식은 끝을 지정함).
각 날짜 및 시간 표현식(start1, end1, start2,
end2)은 DATE, TIME 또는
TIMESTAMP인 값을 리턴해야 합니다.
- start1이 DATE 또는 TIMESTAMP 값을 리턴하는 경우 기타 표현식은 모두 DATE 또는 TIMESTAMP 값을 리턴해야 합니다. 그렇지 않으면 SQL0401N 오류가 리턴됩니다. 리턴된 DATE 값과 연관된 기본 시간은 00:00입니다.
- start1이 TIME 값을 리턴하는 경우 기타 표현식은 TIME 값을 모두 리턴해야 합니다. 그렇지 않으면 오류 SQL0401N이 리턴됩니다.
시작 및 종료 값을 기간에 포함되지 않습니다. 예를 들어, 기간 2016-10-19 - 2016-10-20 및 2016-10-20 - 2016-10-21은 오버랩되지 않습니다.
표현식이 널(NULL) 값을 리턴하지 않으면
OVERLAPS 술어는 기간이 오버랩되는 경우에는 true를, 기간이
오버랩되지 않는 경우에는 false를 리턴합니다. 하나 이상의
날짜 및 시간 표현식이 널(NULL) 값을 리턴하는 경우
다음과 같은 결과가 발생합니다.
- 표현식 중 하나가 널(NULL) 값을 리턴하면 결과는 해당 기간의 기타 값이 기타 기간 내에 포함되는 경우 true를 리턴하고 그렇지 않으면, 결과는 NULL입니다.
- 둘 이상의 표현식이 널(NULL) 값을 리턴하는 경우 결과는 NULL입니다.
예:
OVERLAPS 술어가 true이므로
다음 명령문이 행을 리턴합니다(기간 2016년 3월 17일-21일이
기간 2016년 3월 20일-22일을 오버랩함).
SELECT * from T1 where (cast('2016-03-17' as DATE),
cast('2016-03-21' as DATE)) OVERLAPS
(cast('2016-03-20' as DATE), cast('2016-03-22' as DATE));OVERLAPS 술어가
false이므로 다음 명령문이 행을 리턴하지
않습니다(시작 및 종료 값이 기간에 포함되지 않으므로
기간 2016년 10월 19일-20일이 기간 2016년 10월 20일-21일을
오버랩하지 않음).
SELECT * from T1 where (cast('2016-10-19' as DATE),
cast('2016-10-20' as DATE)) OVERLAPS
(cast('2016-10-20' as DATE), cast('2016-10-21' as DATE));
OVERLAPS 술어가 true이므로
다음 명령문이 행을 리턴합니다(날짜 2016년 3월 22일이
기간 2016년 3월 20일-23일 내에 있음).
SELECT * from T1 where (cast('2016-10-22' as DATE),NULL) OVERLAPS
(cast('2016-10-20' as DATE), cast('2016-10-23' as DATE));
