pilot_name | schedule
------------+-----------
Boris
| {3,5,6,7}
Ivan
| {1,3,6,7}
Petr
| {2,3,5,7}
(3 строки)
Функция array_position возвращает индекс первого вхождения элемента с указанным
значением в массив. Если же такого элемента нет, она возвратит NULL.
Выберем пилотов, летающих по понедельникам и воскресеньям:
SELECT *
FROM pilots
WHERE schedule @> '{ 1, 7 }'::integer[];
pilot_name | schedule
------------+-----------
Ivan
| {1,3,6,7}
(1 строка)
Оператор @> означает проверку того факта, что в левом массиве содержатся все эле-
менты правого массива. Конечно, при этом в левом массиве могут находиться и дру-
гие элементы, что мы и видим в графике этого пилота.
Еще аналогичный вопрос: кто летает по вторникам и/или по пятницам? Для получе-
ния ответа воспользуемся оператором &&, который проверяет наличие общих эле-
ментов у массивов, т. е. пересекаются ли их множества значений. В нашем примере
число общих элементов, если они есть, может быть равно одному или двум. Здесь мы
также использовали нотацию с ключевым словом ARRAY, а не '{ 2, 5 }'::integer[]. Вы
можете применять ту, которая принята в рамках выполнения вашего проекта.
Достарыңызбен бөлісу: