ある期間Aとある期間Bに重なっている部分があるかどうか調べる

1 min read読了の目安(約500字

これはなに?

ある期間Aとある期間Bに重なっている部分があるかどうか調べる方法。
業務では頻出で暗記レベルだと思っていたのだけど、意外と知らない人が多かったので書いておく。

結論

以下のシンプルなif文で、重なっている部分があるかを知ることができる

if A.start < B.end && A.end > B.start {
  // 重なっている部分がある
}

SQLでも同じ

WHERE A.start < B.end
AND WHERE A.end > B.start

期間Aと期間Bが重なるパターンは図の4パターンだけ

※本記事内では開始・終了時間がピッタリの場合は省いている

  1. BがAより少し前にズレて重なっているパターン
  2. AがBより少し前にズレて重なっているパターン
  3. AがBを包括しているパターン
  4. BがAを包括しているパターン

前述のif文で①~④まで全てのパターンを網羅することができる