【问题标题】:Check if timestamp is within tsrange检查时间戳是否在 tsrange 内
【发布时间】:2014-09-05 13:34:20
【问题描述】:

是否可以即时构造tsrange 并检查其中是否包含值?

我有一个包含两个字段的表,session_start 和session_end,我想运行一个查询来检查传递的值是否介于这两个值之间。类似这样的东西(不是有效的 SQL!):

SELECT pk FROM sessions WHERE ? IN [session_start, session_end)

我不确定文字 tsrange 的确切语法以及如何检查是否包含(IN 似乎不起作用`。

请注意,传递的值以及session_start 和session_end 都是TIMESTAMP 字段/值。

干杯!

【问题讨论】:

    标签: postgresql timestamp date-range


    【解决方案1】:

    是的,您可以为此使用range constructor:

    SELECT rangetype(lower, upper[, bounds]);
    -- bounds can be '[]', '[)' (default), '(]', '()'
    
    -- in your case:
    SELECT pk FROM sessions WHERE ? <@ tsrange(session_start, session_end, '[)');
    

    注意:包含operator 是&lt;@ 用于范围(不是IN)。

    【讨论】:

      猜你喜欢
      • 2011-08-12
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 2015-05-31
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多