我面临这个问题:
postgresql中有没有一种方法可以将聚合的时间戳数据放入数组中(例如使用 array_agg
函数),然后在某些条件下执行任何匹配?
我也在做类似的事情 LIKE
在聚合字符串上(使用 string_agg(column,';')
). 但是如何在时间戳上执行类似的操作呢?
所以如果结果是 '{10.10.2021,20.12.2021,1.1.1996}' as timestamp_array
我想过滤至少有一个数组元素的行,在输入之后?
例如, ... WHERE 31.12.2021 > timestamp_array ...
与上面的行不匹配,因为2021年12月31日之后没有数组元素。
但如果我质疑 ... WHERE 31.12.1996 > timestamp_array ...
,将匹配上面的行(因为数组中至少有一个元素在给定的间隔内)。
2条答案
按热度按时间beq87vna1#
首先,您将使用标准日期格式。然后您可以使用:
这里有一把小提琴来说明这个想法。
7rtdyuoh2#
我想筛选至少有一个数组元素在某个输入之后的行?
你可以用
ANY
按建议施工。必须是
<
,不是>
,显然。你的“时间戳”看起来很像日期-
timestamp
input也接受这一点。但一定要使用推荐的iso8601格式(如演示所示),否则您的输入取决于当前会话的设置。
请参见:
与postgresql中的任何操作符相比
但有可能,有更有效的方法。你说的是“聚合时间戳数据”。通常,在聚合之前进行检查要高效得多。尤其是因为它可以使用索引,而不是您的方法。一般来说,
EXISTS
做这个工作。比如:用查询的详细信息开始一个新问题,以获得合适的解决方案。