【问题标题】:PostgreSQL query between a date range but only between specific hours日期范围之间的 PostgreSQL 查询,但仅在特定时间之间
【发布时间】:2021-03-05 15:50:13
【问题描述】:

我正在尝试创建一个查询,该查询将仅查询日期范围之间且仅位于一天中特定时间的行。

只要时间范围在同一天,我就可以查询这个,但在我的应用程序中不能保证这一点(时间范围可能跨越日期边界)。例如:

SELECT * FROM data
WHERE data.utc BETWEEN '2021-01-01' AND '2022-01-01'
AND data.utc::time BETWEEN time '16:00:00' AND time '22:00:00'

仅使用 SQL 是否可以同时支持这两种情况?

我可能需要查询的情况: '16:00:00' --> 同一天的'22:00:00' AND '22:00:00' --> '04:00:00' 跨越日界

我可以在应用程序中做一些事情来计算 WHERE 条件,但想知道是否有更简洁的 SQL 方法来执行此操作。

非常感谢

【问题讨论】:

  • 你不能只结合你的检查来做日期和时间吗?在使用之间:'2021-01-01 16:00:00'(不确定是否使用 postgresql,但我与您合作过的其他人可以这样做)

标签: sql database postgresql time


【解决方案1】:

是的。您可以使用:

where ( (:start_time <= :end_time and data.utc::time between :start_time and :end_time) or
        (:start_time > :end_time and data.utc::time not between :start_time and :end_time)
      )

请注意,between 包括端点,not between 不包括。我不知道这是否是你真正想要的。我实际上建议使用&gt;/&gt;= 来明确您的意图。

【讨论】:

    猜你喜欢
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多