🔗
ある期間Aとある期間Bに重なっている部分があるかどうか調べる
これはなに?
ある期間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パターンだけ
※本記事内では開始・終了時間がピッタリの場合は省いている
- BがAより少し前にズレて重なっているパターン
- AがBより少し前にズレて重なっているパターン
- AがBを包括しているパターン
- BがAを包括しているパターン
前述のif文で①~④まで全てのパターンを網羅することができる
Discussion