4.5. Массивы
Теперь продемонстрируем основные операции, которые можно применять к масси-
вам, выполняя выборки из таблиц. Получим список пилотов, летающих по средам:
SELECT * FROM pilots
WHERE array_position( schedule, 3 ) IS NOT NULL;
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[]. Вы
можете применять ту, которая принята в рамках выполнения вашего проекта.
Достарыңызбен бөлісу: