如果数组包含给定范围内的值,则过滤行
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 变成一个数组,这样它可以与 &&
.
一起使用
我有一个 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 变成一个数组,这样它可以与 &&
.