- 締切済み
SQLの抽出方法について
約管理みたいな事をしております。 下記のように予約表があります。 区分-開始-終了 A-09:00--10:00 B-10:00--12:00 A-15:00--17:00 A-20:00--22:00 区分別に開始と終了時間(範囲内かどうか)を取得したい 区分Aに対して16:00-16:30は重複と判定し 区分Aに対して08:00-09:30は重複と判定し 区分Aに対して17:00-18:00はOK 区分別に時間が重複しているかどうか 取得できるSQL分を教えてください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
考慮したつもりでいるのですが、and,orの混在なので括らないないと誤判定されるのかも。 where 区分 = :入力の区分 and ( (:入力の開始 between 開始 and 終了) or (:入力の終了 between 開始 and 終了) or ((開始 between :入力の開始 and :入力の終了) and (終了 between :入力の開始 and :入力の終了)) ) ) ;
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
select sum(予約件数) "予約重複数" from ( select 1 "予約件数" from TABLE where 区分 = :入力の区分 and ( :入力の開始 between 開始 and 終了 or :入力の終了 between 開始 and 終了 or (開始 between :入力の開始 and :入力の終了 and 終了 between :入力の開始 and :入力の終了) ) ) ; こんな感じの範囲チェックで有無を判断すれば良いように思いますけど・・
- noah7150
- ベストアンサー率46% (116/251)
重複だのOKだの何をするために?質問の意味が良く分からないですが ('重複'、'OK'の文字列で返すカラム? それとも抽出の条件?) 多重判定を行いたいなら 1・判定を関数化する 関数化したなら中で IF が使えますから 2・Case式を使う case when 条件1 then 値1 when 条件2 then 値2 else 値3 end case 最近Oracle使ってないので試せないですが whenの後は条件なのでAndやOrが使えるんじゃないかと思います 記述方法は oracle case で検索すると出てくると思います。
補足
お答えありがとうございます。 Aと言う会議室が16:00-16:30に埋まっている Bと言う会議室が10:00-12:00に埋まっている Aと言う会議室が15:00-17:00に埋まっている Aと言う会議室が20:00-22:00に埋まっている とう言う状況であらたにAと言う会議室に予約を入れる場合 現在の予約状況に重複しないように予約をいれなければなりません ので今回入力された時間が現在の予約に重複しないか 調べたいとです。
補足
お答えありがとうございます。 ご提示いただきましたSQLですと 範囲内のデータがスルーしてしまいます。 A-15:00--17:00 の場合 16:00--16:30 とするとスルーしてしまいます。