我有一个PostgreSQL表,其列timeslot
为int 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
答案 0 :(得分:2)
您可以将重叠运算符&&
与实例化的数组一起使用:
SELECT *
FROM shows
WHERE timeslot && array(SELECT generate_series(0, 67))
当且仅当其两个数组参数重叠时,&& operator
才返回true。 generate_series
方法创建一个范围内包含INT
元素的表格,array
初始化程序将该表格转换为数组,以便可以与&&
一起使用。