SQLで範囲指定同士のチェックが便利なoverlaps
overlaps関数を使うと、両期間を比較してちょっとでも被っているかどうかを比較できます。
上記の例だと、
check_1は被ってるので1
check_2は被ってない(範囲外)なので0
check_3は中に入ってるので、被ってることになり1
という感じになります。可読性がとても上がる。
ちなみにポスグレだと利用にちょっと注意が必要らしい。
参考情報:
https://qiita.com/camp07/items/26837f3f136d53b3617f
範囲指定と範囲指定の被りチェックというのをプログラムを書いていてよくやるのですが、これがとてもわかりづらい。そしてSQLに落とし込むときにわかりづらいのですが、SQL上で綺麗に描く方法がありました。select sysdate, case when (sysdate, sysdate+1) overlaps (sysdate, sysdate) then 1 else 0 end as overlap_check_1, case when (sysdate, sysdate+1) overlaps (sysdate-1, sysdate-1) then 1 else 0 end as overlap_check_2, case when (sysdate, sysdate) overlaps (sysdate-1, sysdate+1) then 1 else 0 end as overlap_check_3from dual
overlaps関数を使うと、両期間を比較してちょっとでも被っているかどうかを比較できます。
上記の例だと、
check_1は被ってるので1
check_2は被ってない(範囲外)なので0
check_3は中に入ってるので、被ってることになり1
という感じになります。可読性がとても上がる。
ちなみにポスグレだと利用にちょっと注意が必要らしい。
参考情報:
https://qiita.com/camp07/items/26837f3f136d53b3617f
コメント