日期范围中数组的元素?

aod*_*odj 5 postgresql array range-types

我有一个日期数组,我想知道数组中的任何元素是否出现在给定的日期范围内。

例如(伪代码 - 不起作用,为了可读性而包装):

SELECT ARRAY['2017-01-01'::DATE, '2017-02-03'::DATE] && 
    daterange('2017-01-01', '2017-01-31', '[]');
Run Code Online (Sandbox Code Playgroud)

这个例子试图展示(虽然它不起作用)是我的日期数组和日期范围之间的值之间是否存在重叠。

理想情况下,我可以用集合来做,并确定两者之间是否存在联合,但似乎不可能将 daterange 对象转换为任何东西。

我确实设法让这个工作,但我不知道如何随后减少行:

SELECT daterange('2017-01-01', '2017-01-31', '[]') @> 
    unnest(ARRAY ['2017-01-01' :: DATE, '2016-07-30' :: DATE]);
Run Code Online (Sandbox Code Playgroud)

这将返回多行:

?column?
----------
 t
 f
(2 rows)
Run Code Online (Sandbox Code Playgroud)

有没有人对此有任何指示?任何帮助表示赞赏。

Eva*_*oll 6

我有一个日期数组,我想知道数组中的任何元素是否出现在给定的日期范围内。

根据查询,您可以使用

  • joanolo 在他的回答中bool_or提到了行聚合。
  • 或者,您可以ANY与 contains 运算符一起使用@>

    SELECT daterange('2017-01-01', '2017-01-31', '[]')  @> 
      ANY(ARRAY['2017-01-01'::date, '2017-02-03'::date]);
    
    SELECT daterange('2017-01-01', '2017-01-31', '[]')  @> 
      ANY(ARRAY['2016-01-02'::date, '2016-01-09'::date]);
    
    Run Code Online (Sandbox Code Playgroud)