You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从PostgreSQL预订系统中查询特定时段的可用房间?

如何查询特定日期+时间段内的可用房间(PostgreSQL实现)

我查阅了许多相关话题来解决这个问题,但没找到符合自身场景的答案,在此分享我的解决方案,希望能帮助到他人。

所需表结构

rooms表(存储房间基础信息)

  • id
  • roomId
  • roomName

bookings表(存储房间预订信息)

  • id
  • roomId
  • startDate (timestamp)
  • endDate (timestamp)

解决方案代码

with room_booked as (select distinct(f1.roomId)
      from bookings f1
      where tsrange(f1.startDate, f1.endDate, '[]') && tsrange(<< your start date>>, << your end date >>, '[]'))
      SELECT
        rooms.roomId,
        rooms.roomName
      FROM rooms 
      WHERE NOT EXISTS (
        SELECT 1
        FROM room_booked
        WHERE room_booked.roomId = rooms.roomId
      )  

代码说明

  1. 第一段WITH语句通过tsrange函数判断预订时段与目标时段的重叠关系,筛选出所有在目标时段内已被预订的房间ID;
  2. 第二段通过NOT EXISTS从rooms表中排除已被预订的房间,得到目标时段内的可用房间;
  3. 可根据实际需求在第二段的WHERE子句中添加额外筛选条件(比如房间类型、容量等)。

内容的提问来源于stack exchange,提问作者OltreXR4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:57:02