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)
有没有人对此有任何指示?任何帮助表示赞赏。
我有一个日期数组,我想知道数组中的任何元素是否出现在给定的日期范围内。
根据查询,您可以使用
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)