問題
突然ですが、問題です。
とあるシステムの利用期間を管理しているユーザマスタが存在するとします。
2021/4/1 ~ 2021/10/1 の期間で
このシステムを1日でも利用できるユーザを検索したい場合
※下の図で言うと、ユーザA ~ ユーザG までを検索結果として出力したい。
どのように検索条件を書くのが最適でしょうか?
アプローチ
このような場合、図にして考えると割と考えやすいですが
面倒臭がって頭の中だけで考えて結論を出すと、結構ゴチャゴチャした条件を書きがちな気がします。(私だけか?)
地道にアプローチしていくと、
ユーザAが該当するにはユーザAの利用期間が2021/4/1 ~ 2021/10/1 内にあればいい。
でもこの条件だとユーザAとユーザDしか該当しないな。。。
じゃあユーザ利用期間(From)が2021/4/1 ~ 2021/10/1、またはユーザ利用期間(To)が2021/4/1 ~ 2021/10/1 にすれば。。。ユーザEが該当しない!
といった具合になります。
(私だけか?)
答え
実はユーザF と ユーザG を検索する条件だけを書けば、ユーザA ~ ユーザG が検索条件に該当します。
よって、
2021/4/1 <= ユーザ.利用期間(To) かつ ユーザ.利用期間(From) <= 2021/10/1
が答えになります。
おわりに
備忘録代わりです。