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

时间:2015-04-20 01:09:48

标签: arrays postgresql range

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

SELECT * FROM shows WHERE timeslot @> ARRAY[167],只返回其中shows包含167的timeslot项,当我真正需要的是:

SELECT * FROM shows WHERE timeslot @> 0-167

SELECT * FROM shows WHERE timeslot @> >0

1 个答案:

答案 0 :(得分:2)

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

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

当且仅当其两个数组参数重叠时,&& operator才返回true。 generate_series方法创建一个范围内包含INT元素的表格,array初始化程序将该表格转换为数组,以便可以与&&一起使用。