如果数组包含给定范围内的值,则过滤行

Filter rows if array contains value in a given range

我有一个 PostgreSQL table,其列 timeslot 是一个 int array。我需要查询 returns 行,其 timeslot 包含指定范围内的至少一个数字。或者,它可以 return 行 timeslot 包含大于 0 的值。现在,我的查询如下所示:

SELECT * FROM shows WHERE timeslot @> ARRAY[167],它只会 return 来自 shows 的项目,其 timeslot 包含 167,而我真正需要的是:

SELECT * FROM shows WHERE timeslot @> 0-167,或

SELECT * FROM shows WHERE timeslot @> >0

您可以将重叠运算符 && 与实例化我们的数组一起使用:

SELECT * 
FROM shows
WHERE timeslot && array(SELECT generate_series(0, 67))

&& operator returns true if and only if its two array arguments overlap. The generate_series 方法创建一个 table,在一个范围内有 INT 个元素,array 初始化器将 table 变成一个数组,这样它可以与 &&.

一起使用