Функции и операторы для массивов
В Таблице 51 приведены специальные операторы, имеющиеся для типов массивов. Кроме них для массивов имеются обычные операторы сравнения, перечисленные в таблице Операторы сравнения. Эти операторы сравнения сопоставляют содержимое массивов поэлементно, используя функцию сравнения для B-дерева, определенную для типа данных этого элемента по умолчанию, и сортируют по принципу первого различия. В многомерных массивах элементы просматриваются в построчном порядке (последний индекс меняется в первую очередь). Если содержимое двух массивов одинаково, но размерности отличаются, порядок сортировки определяется первым отличием в информации о размерности.
Таблица 51. Операторы для массивов
Оператор |
||
---|---|---|
Описание Пример(ы) |
||
anyarray @> anyarray → boolean | ||
Первый массив содержит второй, то есть каждый элемент, находящийся во втором массиве, равен какому-либо элементу первого? (Дубликаты обрабатываются на общих основаниях, поэтому массивы ARRAY[1] и ARRAY[1,1] считаются содержащими друг друга.)ARRAY[1,4,3] @> ARRAY[3,1,3] → t |
||
anyarray <@ anyarray → boolean | ||
Первый массив содержится во втором?ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6] → t |
||
anyarray && anyarray → boolean | ||
Массивы пересекаются, то есть имеют какие-либо общие элементы?ARRAY[1,4,3] && ARRAY[2,1] → t |
||
anycompatiblearray || anycompatiblearray → anycompatiblearray | ||
Конкатенирует два массива. Со значениями NULL или пустыми массивами эта операция не проводится; в иных случаях массивы должны иметь одинаковое число размерностей (как показано в первом примере) или отличаться на одну размерность (как показано во втором примере). Если эти массивы не одинаковых типов элементов, они будут приведены к общему типу (см. раздел UNION, CASE и связанные конструкции).ARRAY[1,2,3] || ARRAY[4,5,6,7] → {1,2,3,4,5,6,7} ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9.9]] → {{1,2,3},{4,5,6},{7,8,9.9}} |
||
anycompatible || anycompatiblearray → anycompatiblearray | ||
Конкатенирует элемент с началом массива (который должен быть пустым или одномерным).3 || ARRAY[4,5,6] → {3,4,5,6} |
||
anycompatiblearray || anycompatible → anycompatiblearray | ||
Конкатенирует элемент с концом массива (который должен быть пустым или одномерным).ARRAY[4,5,6] || 7 → {4,5,6,7} |
Более подробную информацию о поведении операторов для массивов см. в разделе Массивы. Более подробную информацию о том, какие операторы поддерживают операции с индексами, см. в разделе Типы индексов.
В Таблице 52 приведены имеющиеся функции для использования с типами массивами. Дополнительную информацию и примеры использования этих функций см. в разделе Массивы.
Таблица 52. Функции для массивов
Функция |
||
---|---|---|
Описание Пример(ы) |
||
array_append ( anycompatiblearray, anycompatible ) → anycompatiblearray | ||
Добавляет элемент в конец массива (так же, как оператор anycompatiblearray || anycompatible ).array_append(ARRAY[1,2], 3) → {1,2,3} |
||
array_cat ( anycompatiblearray, anycompatiblearray ) → anycompatiblearray | ||
Конкатенирует два массива (так же, как оператор anycompatiblearray || anycompatiblearray ).array_cat(ARRAY[1,2,3], ARRAY[4,5]) → {1,2,3,4,5} |
||
array_dims ( anyarray ) → text | ||
Возвращает текстовое представление размерностей массива.array_dims(ARRAY[[1,2,3], [4,5,6]]) → [1:2][1:3] |
||
array_fill ( anyelement, integer[] [, integer[] ] ) → anyarray | ||
Возвращает массив, заполненный копиями заданного значения и имеющий размерности той длины, которая указана во втором аргументе. Необязательный третий аргумент предоставляет значения нижней границы для каждой размерности (по умолчанию все они равны 1).array_fill(11, ARRAY[2,3]) → {{11,11,11},{11,11,11}} array_fill(7, ARRAY[3], ARRAY[2]) → [2:4]={7,7,7} |
||
array_length ( anyarray, integer ) → integer | ||
Возвращает длину запрошенной размерности массива.array_length(array[1,2,3], 1) → 3 |
||
array_lower ( anyarray, integer ) → integer | ||
Возвращает нижнюю границу запрошенной размерности массива.array_lower('[0:2]={1,2,3}'::integer[], 1) → 0 |
||
array_ndims ( anyarray ) → integer | ||
Возвращает количество размерностей массива.array_ndims(ARRAY[[1,2,3], [4,5,6]]) → 2 |
||
array_position ( anycompatiblearray, anycompatible [, integer ] ) → integer | ||
Возвращает индекс первого вхождения второго аргумента в массиве или NULL, если таковой отсутствует. Если задан третий аргумент, поиск начинается с этого индекса. Массив должен быть одномерным. Сравнения производятся с применением семантики IS NOT DISTINCT FROM, что позволяет искать значения NULL.array_position(ARRAY['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], 'mon') → 2 |
||
array_positions ( anycompatiblearray, anycompatible ) → integer[] | ||
Возвращает массив индексов всех вхождений второго аргумента в массиве, заданном в первом аргументе. Массив должен быть одномерным. Сравнения производятся с применением семантики IS NOT DISTINCT FROM, что позволяет искать значения NULL. NULL возвращается, только массив равен NULL; если заданное значение отсутствует в массиве, возвращается пустой массив.array_positions(ARRAY['A','A','B','A'], 'A') → {1,2,4} |
||
array_prepend ( anycompatible, anycompatiblearray ) → anycompatiblearray | ||
Добавляет элемент в начало массива (так же, как оператор anycompatible || anycompatiblearray ).array_prepend(1, ARRAY[2,3]) → {1,2,3} |
||
array_remove ( anycompatiblearray, anycompatible ) → anycompatiblearray | ||
Удаляет из массива все элементы, равные заданному значению. Массив должен быть одномерным. Сравнения производятся с применением семантики IS NOT DISTINCT FROM, что позволяет удалять значения NULL.array_remove(ARRAY[1,2,3,2], 2) → {1,3} |
||
array_replace ( anycompatiblearray, anycompatible, anycompatible ) → anycompatiblearray | ||
Заменяет каждый элемент массива, равный второму аргументу, значением третьего аргумента.array_replace(ARRAY[1,2,5,4], 5, 3) → {1,2,3,4} |
||
array_to_string ( массив anyarray, разделитель text [, нулевая_строка text ] ) → text | ||
Преобразует каждый элемент массива в текстовое представление и конкатенирует те из них, что разделены строкой-разделителем. Если задана нулевая_строка и она отлична от NULL, то эта строка представляет содержащиеся в массиве записи NULL; в противном случае такие записи опускаются.array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') → 1,2,3,*,5 |
||
array_upper ( anyarray, integer ) → integer | ||
Возвращает верхнюю границу запрошенной размерности массива.array_upper(ARRAY[1,8,3,7], 1) → 4 |
||
cardinality ( anyarray ) → integer | ||
Возвращает общее количество элементов в массиве или 0, если это пустой массив.cardinality(ARRAY[[1,2],[3,4]]) → 4 |
||
trim_array ( массив anyarray, n integer ) → anyarray | ||
Усекает массив, удаляя последние n элементов. Если массив многомерный, усекается только первая размерность.trim_array(ARRAY[1,2,3,4,5,6], 2) → {1,2,3,4} |
||
unnest ( anyarray ) → setof anyelement | ||
Разворачивает массив в набор строк. Элементы массива прочитываются в порядке хранения.
|
||
unnest ( anyarray, anyarray [, ... ] ) → setof anyelement, anyelement [, ... ] | ||
Разворачивает несколько массивов (возможно, разных типов данных) в набор строк. Если у массивов неодинаковая длина, то более короткие заполняются значениями NULL. Эта форма допускается только в предложении FROM; см. подраздел Табличные функции.
|
Описание работающей с массивами функции array_agg см. в разделе Агрегатные функции.