9.19. Функции и операторы массивов#

9.19. Функции и операторы массивов

9.19. Функции и операторы массивов

Таблица 9.52 показывает специализированные операторы, доступные для массивных типов. Кроме того, для массивов доступны обычные операторы сравнения, показанные в Таблица 9.1. Операторы сравнения сравнивают содержимое массивов элемент за элементом, используя функцию сравнения B-дерева по умолчанию для типа данных элемента и сортируются на основе первого отличия. В многомерных массивах элементы посещаются в порядке построчного обхода (последний индекс изменяется наиболее быстро). Если содержимое двух массивов равно, но размерность различается, первое отличие в информации о размерности определяет порядок сортировки.

Таблица 9.52. Операторы массивов

Оператор

Описание

Пример(ы)

anyarray @> anyarrayboolean

Содержит ли первый массив второй, то есть, каждый элемент, появляющийся во втором массиве, равен некоторому элементу первого массива? (Дубликаты не обрабатываются особым образом, таким образом, ARRAY[1] и ARRAY[1,1] считаются содержащими друг друга).

ARRAY[1,4,3] @> ARRAY[3,1,3]t

anyarray <@ anyarrayboolean

Содержит ли первый массив второй?

ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6]t

anyarray && anyarrayboolean

Перекрываются ли массивы, то есть, имеют ли они общие элементы?

ARRAY[1,4,3] && ARRAY[2,1]t

anycompatiblearray || anycompatiblearrayanycompatiblearray

Сцепляет два массива. Сцепление пустого или нулевого массива не выполняется; в противном случае массивы должны иметь одинаковое количество измерений (как показано на первом примере) или отличаться на одно измерение (как показано на втором примере). Если массивы имеют разные типы элементов, они будут приведены к общему типу (см. Раздел 10.5).

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 || anycompatiblearrayanycompatiblearray

Добавляет элемент в начало массива (который должен быть пустым или одномерным).

3 || ARRAY[4,5,6]{3,4,5,6}

anycompatiblearray || anycompatibleanycompatiblearray

Добавляет элемент в конец массива (который должен быть пустым или одномерным).

ARRAY[4,5,6] || 7{4,5,6,7}


См. Раздел 8.15 для получения дополнительной информации о поведении оператора массива. См. Раздел 11.2 для получения дополнительной информации о том, какие операторы поддерживают индексированные операции.

Таблица 9.53 показывает функции, доступные для использования с типами массивов. См. Раздел 8.15 для получения дополнительной информации и примеров использования этих функций.

Таблица 9.53. Функции массивов

Функция

Описание

Пример(ы)

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

Возвращает длину запрошенного измерения массива. (Вместо 0 для пустых или отсутствующих измерений массива возвращает NULL).

array_length(array[1,2,3], 1)3

array_length(array[]::int[], 1)NULL

array_length(array['text'], 2)NULL

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 ( array anyarray, delimiter text [, null_string text ] ) → text

Преобразует каждый элемент массива в его текстовое представление и объединяет их, разделяя строкой delimiter. Если задана строка null_string и она не равна NULL, то элементы массива со значением NULL представляются этой строкой; в противном случае они опускаются. См. также string_to_array.

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 ( 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(ARRAY[1,2])

 1
 2

unnest(ARRAY[['foo','bar'],['baz','quux']])

 foo
 bar
 baz
 quux

unnest ( anyarray, anyarray [, ... ] ) → setof anyelement, anyelement [, ... ]

Расширяет несколько массивов (возможно, разных типов данных) в набор строк. Если массивы имеют разную длину, то более короткие заполняются значениями NULL. Эта форма разрешена только в разделе FROM запроса; см. Раздел 7.2.1.4.

select * from unnest(ARRAY[1,2], ARRAY['foo','bar','baz']) as x(a,b)

 a |  b
---+-----
 1 | foo
 2 | bar
   | baz


См. также Раздел 9.21 по функции агрегации array_agg для использования с массивами.