OVERLAPS 술어

OVERLAPS 술어는 두 시간 기간의 오버랩 여부를 판별합니다. 시간 기간은 날짜 및 시간 표현식 쌍으로 지정됩니다(첫 번째 표현식은 기간의 시작을, 두 번째 표현식은 끝을 지정함).

Read syntax diagramSkip visual syntax diagram(start1,end1 )OVERLAPS(start2,end2 )
각 날짜 및 시간 표현식(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-202016-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));