PostgreSQLでは、 OVERLAPS
を使用できます 重複する期間をテストする演算子。
この関数は、2つの期間(エンドポイントによって定義される)が重なる場合はtrueを返し、重ならない場合はfalseを返します。
構文
次の2つの方法で使用できます。
(start1, end1) OVERLAPS (start2, end2)
(start1, length1) OVERLAPS (start2, length2)
つまり、開始日時を指定すると、終了日時または時間の長さを指定するオプションがあります。
より具体的には、エンドポイントは、日付、時刻、またはタイムスタンプのペアとして指定できます。または、日付、時刻、またはタイムスタンプの後に間隔を指定します。
値のペアが指定されている場合、開始または終了のいずれかを最初に書き込むことができます。 OVERLAPS
ペアの以前の値を自動的に開始します。
例
これがデモンストレーションの基本的な例です。
SELECT (date '2022-01-09', date '2022-02-10') OVERLAPS
(date '2022-02-09', date '2022-03-10');
結果:
True
両方の期間が重複しているため、結果は真です。
ここでも同じですが、今回は期間が重ならないように変更します。
SELECT (date '2022-01-09', date '2022-02-08') OVERLAPS
(date '2022-02-09', date '2022-03-08');
結果:
False
一般的なエンドポイント
各期間は、ハーフオープン間隔 start
を表すと見なされることに注意してください。 <=
時間
<コード>
end
、 start
でない限り、 およびend
等しい場合、それはその単一の瞬間を表します。これは、エンドポイントのみが共通している2つの期間が重複しないことを意味します。
次の例では、2番目の期間は最初の期間が終了するのと同じ日に開始します。
SELECT (date '2022-01-09', date '2022-02-10') OVERLAPS
(date '2022-02-10', date '2022-03-10');
結果:
False
ただし、最初の期間の両方のエンドポイントが同じである場合は、異なる結果が得られます。
SELECT (date '2022-01-09', date '2022-01-09') OVERLAPS
(date '2022-01-09', date '2022-02-10');
結果:
True
間隔
前述のように、2番目のエンドポイントは間隔にすることができます。
SELECT (date '2022-01-09', interval '32 days') OVERLAPS
(date '2022-02-09', date '2022-03-10');
結果:
True