繁体   English   中英

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

[英]SQL To check if a set of dates fall within a specified range of dates

我有一个表,其中包含模式中房间不可用时的日期:

ROOM_ID | DATE_UNAVAILABLE

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

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

更确切地说

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

我在这里使用 php MySQL。

内部查询找到不可用的房间,然后我们使用 Not-exists left join 从我们的结果中删除这些日期,只留下可用的房间。

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

如果你有另一张桌子,比如说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)

你不能只用你指定的一张桌子来做这件事,因为当桌子是空的 - 所有房间都可用,但你不会得到任何结果。

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

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

如果房间可用,给定选择返回 0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM