9.19. Функции и операторы для работы с массивами
В Таблице 9.51 показаны имеющиеся специальные операторы для типов-массивов. Кроме них для массивов определены обычные операторы сравнения, показанные в Таблице 9.1. Эти операторы сравнения сопоставляют содержимое массивов по элементам, используя при этом функцию сравнения для B-дерева, определённую для типа данного элемента по умолчанию, и упорядочивают их по первому различию. В многомерных массивах элементы просматриваются по строкам (индекс последней размерности меняется в первую очередь). Если содержимое двух массивов совпадает, а размерности отличаются, результат их сравнения будет определяться первым отличием в размерностях. (В PostgreSQL до версии 8.2 поведение было другим: два массива с одинаковым содержимым считались одинаковыми, даже если число их размерностей и границы индексов различались.)
Таблица 9.51. Операторы для работы с массивами
Оператор Описание Пример(ы) |
---|
Первый массив содержит второй (имеется ли для каждого элемента второго массива равный ему в первом)? (Повторяющиеся элементы рассматриваются на общих основаниях, поэтому массивы
|
Первый массив содержится во втором?
|
Массивы пересекаются (у них есть общие элементы)?
|
Соединяет два массива. Если один из операндов — NULL или пустой массив, оператор никак не действует; в противном случае число размерностей массивов должно быть одинаковым (этот случай показан в первом примере) или могут отличаться на один (это иллюстрирует второй пример).
|
Вставляет элемент в начало массива (массив должен быть пустым или одномерным).
|
Вставляет элемент в конец массива (массив должен быть пустым или одномерным).
|
Подробнее поведение операторов с массивами описано в Разделе 8.15. За дополнительными сведениями об операторах, поддерживающих индексы, обратитесь к Разделу 11.2.
В Таблице 9.52 перечислены функции, предназначенные для работы с массивами. Дополнительная информация о них и примеры использования приведены в Разделе 8.15.
Таблица 9.52. Функции для работы с массивами
Функция Описание Пример(ы) |
---|
Добавляет элемент в конец массива (так же, как оператор
|
Соединяет два массива (так же, как оператор
|
Возвращает текстовое представление размерностей массива.
|
Возвращает массив, заполненный заданным значением и имеющий размерности, указанные во втором аргументе. В необязательном третьем аргументе могут быть заданы нижние границы для каждой размерности (по умолчанию
|
Возвращает длину указанной размерности массива. (Для пустых или несуществующих размерностей массива выдаёт не 0, а NULL.)
|
Возвращает нижнюю границу указанной размерности массива.
|
Возвращает число размерностей массива.
|
Возвращает позицию первого вхождения второго аргумента в массиве либо
|
Возвращает массив позиций всех вхождений второго аргумента в одномерном массиве, заданном первым аргументом. Эта функция определяет равенство как
|
Вставляет элемент в начало массива (так же, как оператор
|
Удаляет из массива все элементы, равные заданному значению. Массив должен быть одномерным. Эта функция определяет равенство как
|
Заменяет каждый элемент массива, равный второму аргументу, значением третьего аргумента.
|
Представляет все элементы массива в виде текстовых строк и объединяет эти строки через разделитель, заданный параметром
|
Возвращает верхнюю границу указанной размерности массива.
|
Возвращает общее число элементов в массиве (0, если массив пуст).
|
Разделяет заданную параметром
|
Разворачивает массив в набор строк. Элементы массива прочитываются в порядке хранения.
1 2
foo bar baz quux |
Разворачивает массивы (возможно разных типов) в набор кортежей. Если массивы имеют разную длину, кортежи дополняются до большей длины значениями
a | b ---+----- 1 | foo 2 | bar | baz |
Примечание
В поведении string_to_array
по сравнению с PostgreSQL версий до 9.1 произошли два изменения. Во-первых, эта функция возвращает пустой массив (содержащий 0 элементов), а не NULL
, когда входная строка имеет нулевую длину. Во-вторых, если в качестве разделителя задан NULL
, эта функция разбивает строку по символам, а не просто возвращает NULL
, как было раньше.
Вы также можете узнать об агрегатной функции, работающей с массивами, array_agg
в Разделе 9.21.