約管理みたいな事をしております。
下記のように予約表があります。

区分-開始-終了
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分を教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

考慮したつもりでいるのですが、and,orの混在なので括らないないと誤判定されるのかも。



where
区分 = :入力の区分 and
(
(:入力の開始 between 開始 and 終了) or
(:入力の終了 between 開始 and 終了) or
((開始 between :入力の開始 and :入力の終了) and
(終了 between :入力の開始 and :入力の終了))
)
)
;
    • good
    • 0

select sum(予約件数) "予約重複数"


from
(
select 1 "予約件数" from TABLE
where
区分 = :入力の区分 and
(
:入力の開始 between 開始 and 終了 or
:入力の終了 between 開始 and 終了 or
(開始 between :入力の開始 and :入力の終了 and
終了 between :入力の開始 and :入力の終了)
)
)
;

こんな感じの範囲チェックで有無を判断すれば良いように思いますけど・・

この回答への補足

お答えありがとうございます。

ご提示いただきましたSQLですと
範囲内のデータがスルーしてしまいます。

A-15:00--17:00 の場合

16:00--16:30

とするとスルーしてしまいます。

補足日時:2009/05/25 12:47
    • good
    • 0

重複だの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と言う会議室に予約を入れる場合
現在の予約状況に重複しないように予約をいれなければなりません
ので今回入力された時間が現在の予約に重複しないか
調べたいとです。

補足日時:2009/05/23 00:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報