OVERLAPS 述部

OVERLAPS 述語は、日時順の 2 つの期間が重なり合っているかどうかを判別します。 日時順の期間は、日時式のペアによって指定されます (最初の式は期間の開始を指定し、2 番目はその終了を指定します)。

Read syntax diagramSkip visual syntax diagram(start1,end1 )OVERLAPS(start2,end2 )
それぞれの日時式 (start1end1start2、および 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 を返します。 1 つ以上の日時式が NULL 値を返す場合、次のように結果に影響します。
  • 式の 1 つが NULL 値を返す場合、その期間の他の値が他の期間内に収まれば、結果は true になり、収まらなければ、結果は NULL になります。
  • 式の 2 つ以上が 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));