选择特定日期范围之间的行

时间:2012-05-19 14:16:34

标签: mysql sql

  

可能重复:
  How to look which room is available between 2 dateTimes

我有这行数据

|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预订房间,我希望看到符合该标准的房间列表。

2 个答案:

答案 0 :(得分: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) 

答案 1 :(得分:0)

我怀疑你想要:

SELECT * 
FROM reservations AS res 
WHERE res.expected_checkout_date <= '2012-05-02'
   OR '2012-05-09' <= res.expected_checkin_date