Фильтровать строки, если массив содержит значение в заданном диапазоне

63
6

У меня есть таблица PostgreSQL с timeslot столбца, который является int array. Мне нужно сделать запрос, который возвращает строки, timeslot содержат по крайней мере одно число в указанном диапазоне. Кроме того, он может возвращать строки, чей timeslot содержит значения, превышающие 0. Прямо сейчас мой запрос выглядит так:

SELECT * FROM shows WHERE timeslot @> ARRAY[167], shows timeslot SELECT * FROM shows WHERE timeslot @> ARRAY[167], который будет возвращать только элементы из shows, чьи timeslot содержит 167, когда то, что мне действительно нужно что - то вроде:

SELECT * FROM shows WHERE timeslot @> 0-167 или

SELECT * FROM shows WHERE timeslot @> >0

спросил(а) 2021-01-25T15:36:24+03:00 5 месяцев назад
1
Решение
77

Вы можете использовать оператор перекрытия && вместе с массивом, созданным нами:

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

Оператор && operator возвращает true тогда и только тогда, когда его два аргумента массива перекрываются. Метод generate_series создает таблицу с элементами INT в диапазоне, и инициализатор array превращает эту таблицу в массив, чтобы ее можно было использовать с &&.

ответил(а) 2021-01-25T15:36:24+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема