回答編集履歴
2
取り消し機能がないので、コメントを修正します。
test
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
start < endという前提条件で
|
2
2
|
|
3
|
-
終了日時がテーブルのstart未満または開始日時がendよりあとという条件で、レコードが取得できなければ予約
|
3
|
+
終了日時がテーブルのstart未満または開始日時がendよりあとという条件で、レコードが取得できなければ予約可能と考えるが正しいかと思います。
|
1
申し訳ありません。回答に誤りがありましたので取り消させてください。私の回答では範囲が重複している場合が考慮されていません。
test
CHANGED
@@ -1,29 +1,3 @@
|
|
1
|
-
|
1
|
+
start < endという前提条件で
|
2
2
|
|
3
|
-
SQLは以下のようになるかと
|
4
|
-
|
5
|
-
ちなみに質問者さんのSQLでも分かりづらいですが取れると思います。
|
6
|
-
|
7
|
-
ただ示されているデータのスタートに17:00があるため、質問者さんのSQLでは時間が被る扱いになりますね。
|
8
|
-
|
9
|
-
|
3
|
+
終了日時がテーブルのstart未満または開始日時がendよりあとという条件で、レコードが取得できなければ予約不可能と考えるが正しいかと思います。
|
10
|
-
|
11
|
-
2行目の終了日時と3行目の開始日時もかぶっています。
|
12
|
-
|
13
|
-
カラムの定義として、startとendの重複は認めるのか、その場合パラメータとして渡される値は、
|
14
|
-
|
15
|
-
その値以上なのかより上なのかをしっかり定義した方がいいと思います。
|
16
|
-
|
17
|
-
```
|
18
|
-
|
19
|
-
SELECT * FROM orders
|
20
|
-
|
21
|
-
WHERE
|
22
|
-
|
23
|
-
start >= '2021-11-05 16:00:00'
|
24
|
-
|
25
|
-
AND
|
26
|
-
|
27
|
-
end <= '2021-11-05 17:00:00'
|
28
|
-
|
29
|
-
```
|