SQL检查一组日期是否在指定的日期范围内

时间:2011-02-17 09:29:41

标签: sql mysql

大家好我有一张桌子,可以在架构中找不到房间时的日期:

ROOM_ID | DATE_UNAVAILABLE

我需要一个sql查询来检查房间是否在两个日期之间可用 - 有些事情沿着

Select All rooms that are constantly available between date 1 and date 2

或者更确切地说

选择所有未在日期不可用表格中输入日期的房间,该日期位于日期1和日期2之间

我在这里使用php MySQL

由于

3 个答案:

答案 0 :(得分:2)

内部查询找到不可用的房间,然后我们使用不存在的左连接从我们的结果中删除这些日期,只留下我们可用的房间。

SELECT r.ROOM_ID
FROM rooms r LEFT JOIN (
    SELECT ROOM_ID
    FROM tableName
    WHERE DATE_UNAVAILABLE BETWEEN 'Date1' AND 'Date2'
    GROUP BY ROOM_ID
  ) g ON r.ROOM_ID = g.ROOM_ID
WHERE g.ROOM_ID IS NULL

另外,如果您有正确的索引,跳过该组可能会更快:

SELECT r.ROOM_ID
FROM rooms r LEFT JOIN tableName g ON r.ROOM_ID = g.ROOM_ID
    AND g.DATE_UNAVAILABLE BETWEEN 'Date1' AND 'Date2'
WHERE g.ROOM_ID IS NULL

答案 1 :(得分:1)

如果您有另一张桌子,请说rooms它可以是这样的:

select * from rooms r where not exists
(select * from room_unavail u
    where r.id = u.id and u.date_unavailable between date1 and date2)

您不能只使用您指定的一个表来执行此操作,因为当表为空时 - 所有房间都可用,但您不会得到任何结果。

答案 2 :(得分:0)

让myRoomId为给定房间的ID,dateStart和dateEnd为时间间隔的开始和结束日期。比:

select count(*) from tblRooms
where date_unavailable>=dateStart and date_unavailable<=dateEnd
and room_id = myRoomId

给定select如果房间可用则返回0。