首页 > 解决方案 > 查询postgres数据库

问题描述

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

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'

标签: sqlpostgresql

解决方案


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

各种范围功能将帮助您找到您正在寻找的记录。

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

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 将是您存储时间戳范围的字段。


推荐阅读