0

重複の可能性:
2つのdateTimesの間に利用可能な部屋を確認する方法

この行のデータがあります

|room_id|checkin     |checkout  |
+       +            +          +
|1      |2012-05-02  |2012-05-09|

しかし、私は2つの日付の間のこの行を選択したくありません

私はこのクエリを持っています

SELECT * 
FROM `reservations`  `res` 
WHERE (2012-05-03 
   NOT BETWEEN res.expected_checkin_date AND res.expected_checkout_date) 
 AND COALESCE(2012-05-08 
   NOT BETWEEN res.expected_checkin_date AND res.expected_checkout_date) 

しかし、私はまだこの列を取得しているので、表示されることは想定されていません。実際、私の考えは、これら2つの日付の間にないすべての行を選択することです。何か案が?

アップデート1

基本的に、誰かが5/3から5/8まで部屋を予約しようとしているので、その基準を満たす部屋のリストを表示したいと思います。

4

2 に答える 2

1

checkinタイプが何であるか、checkout文字列か日付/日時かがわからない場合、問題は、日付定数が一重引用符で区切られていない(つまり、本来あるべき文字列として表されていない)という事実に関係しているようです。 )。

したがって、クエリの代わりに次のことを試してください。

SELECT * 
FROM `reservations`  `res` 
WHERE ('2012-05-03' 
   NOT BETWEEN res.expected_checkin_date AND res.expected_checkout_date) 
 AND COALESCE('2012-05-08' 
   NOT BETWEEN res.expected_checkin_date AND res.expected_checkout_date) 
于 2012-05-19T14:35:27.630 に答える
0

私はあなたが欲しいと思う:

SELECT * 
FROM reservations AS res 
WHERE res.expected_checkout_date <= '2012-05-02'
   OR '2012-05-09' <= res.expected_checkin_date  
于 2012-05-19T14:38:06.747 に答える