0

可能重复:
如何查看两个日期时间之间的可用房间

我有这行数据

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

但我不想选择两个日期之间的这一行

我有这个查询

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) 

但是,我仍然得到不应该出现的这一行。实际上,我的想法是选择不在这两个日期之间的所有行。任何想法?

更新 1

基本上,有人试图从 5/3 到 5/8 预订房间,我想查看符合该标准的房间列表。

4

2 回答 2

1

不知道是什么类型checkincheckout无论是字符串还是日期/日期时间,问题似乎与您的日期常量没有用单引号分隔(即它们不应该表示为字符串)有关。 )

因此,只需尝试以下操作而不是您的查询:

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 回答