【问题标题】:Query postgres database查询postgres数据库
【发布时间】:2025-12-17 16:15:02
【问题描述】:

我正在执行预订酒店的功能,当我通过以下方式获得按日期提供的房间时

SELECT * 
FROM oder 
WHERE
    startDate >= '2020-12-26 06:53:18.114+00' AND 
    endDate <= '2020-12-30 06:53:18.114+00'

但是当我输入存储在数据库中的确切开始和结束日期时它可以工作,我希望当我输入开始和结束日期时,时间可以在数据库中存储的时间段内,我也可以得到预订的房间.

示例:我选择 startDate = 2020-12-27 和 endDate=2020-12-28 是在 2020-12-26 到 2020-12-30 期间,我希望结果像上面的查询一样返回

SELECT * 
FROM oder 
WHERE
    startDate >= '2020-12-26 06:53:18.114+00' AND
    endDate <= '2020-12-28 06:53:18.114+00'

【问题讨论】:

  • 请添加一些示例数据和预期的输出。包括。一些不符合条件的数据。

标签: sql postgresql


【解决方案1】:

看起来您可能对范围数据类型感兴趣,在这种情况下为tsrange。使用范围时,您还可以创建constraint 以避免重复预订。

各种range functions将帮助您找到您正在寻找的记录。

编辑:当使用范围并查找重叠的记录时,此查询可能会完成这项工作:

SELECT
    * 
FROM
    oder 
WHERE
    tsrange_field && tsrange ( '2020-12-26 06:53:18.114+00', '2020-12-28 06:53:18.114+00', '[]' );

假设:字段 tsrange_field 将是您存储时间戳范围的字段。

【讨论】:

    【解决方案2】:

    如果我正确地跟踪了您,您需要在您提供的时间段内预订的房间作为输入。

    您可以使用OR 条件和BETWEEN,如下所示:

    SELECT * 
      FROM oder 
     WHERE startDate between '2020-12-26 06:53:18.114+00' AND '2020-12-30 06:53:18.114+00'
        or endDate between '2020-12-26 06:53:18.114+00' AND '2020-12-30 06:53:18.114+00'
    

    【讨论】: