Skip to main content

数组函数和运算符

数组函数

array_append

any_compatible 添加到输入数组的末尾。

句法
array_append ( array, any_compatible ) → array
示例
array_append(array[66], 123){66, 123}

array_cat

连接两个具有相同数据类型的数组。

如果输入的其中一个数组是二维数组,若另一个数组是第二个参数,则该数组将作为最后一个元素添加到第一个数组中。若另一个数组是第一个参数,则该数组将作为第一个元素添加到第一个数组中。

句法
array_cat ( array, array ) → array
示例
array_cat(array[66], array[123]){66, 123}

array_cat(array[array[66]], array[233]){{66}, {233}}

array_cat(array[233], array[array[66]]){{233}, {66}}

array_dims

以字符串形式返回数组的维度。数组必须是一维的。

句法
array_dims ( array ) → string
示例
array_dims(array[2,3,4])[1:3]

array_distinct

返回与输入数组类型相同的数组,并删除所有重复值。

句法
array_distinct ( array ) → array
示例
array_distinct(array[1,2,1,1]){1,2}

array_length

此函数有两个变量。

array_length ( array )

返回 array 的长度。

句法
array_length ( array ) → int
示例
array_length(array[1,2,3,4,1])5

array_length ( array int )

返回 array 中请求的数组维度的长度。int 必须是 1。

句法
array_length ( array, int ) → int
示例
array_length(array[2, 3, 4], 1)3

array_lower

返回 array 中请求的数组维度的下界。(始终返回 1 或 null。)

句法
array_lower ( array, int ) → int
示例
array_lower(array[2, 3, 4], 1)1

array_max

返回数组中的最大值。

空元素将被跳过,但如果数组只包含空元素,则返回 NULL。

句法
array_max ( array )type of the elements
示例
array_max(array[3.14, 1.14, 1.14514])3.14

array_max(array[date'2002-10-30', date'2023-09-06', date'2017-06-18'])2023-09-06

array_max(array['',''])empty

array_max(array['a', 'b', NULL, 'c'])c

array_max(array[NULL])NULL

array_min

返回数组中的最小值。

空元素将被跳过,但如果数组只包含空元素,则返回 NULL。

句法
array_min ( array )type of the elements
示例
array_min(array['a', 'b', 'c'])a

array_min(array[date'2002-10-30', date'2023-09-06', date'2017-06-18'])2002-10-30

array_min(array['',''])empty

array_min(array['a', 'b', NULL, 'c'])a

array_min(array[NULL])NULL

array_ndims

返回 array 的维数。

句法
array_ndims ( array ) → int
示例
array_ndims(array[array[2, 3], array[4, 5]])2

array_position

返回 arrayany_compatible 元素第一次出现的下标。

句法
array_position ( array, any_compatible ) → int
示例
array_position(array[1,2,3,4,5,6,1,2,3,4,5,6], 4)4

array_positions

返回 arrayany_compatible 元素所有出现位置的下标组成的数组。

句法
array_positions ( array, any_compatible ) → array
示例
array_positions(array[1,2,3,4,5,6,1,2,3,4,5,6], 4){4, 10}

array_prepend

在输入数组的开头添加 any_compatible

句法
array_prepend ( any_compatible, array ) → array
示例
array_prepend(123, array[66]){123, 66}


array_remove

返回删除了所有 any_compatible 元素后的数组。还支持多维数组。

句法
array_remove ( array, any_compatible ) → array
示例
array_remove(array[array[1],array[2],array[3],array[2]], array[2]){{1},{3}}

array_replace

返回将所有 current_element 替换为 new_element 后的数组。还支持多维数组。数组为多维时,元素必须是少一维的数组。不支持递归替换多维数组的基本元素。

句法
array_replace ( array, current_element, new_element ) → array
示例
array_replace(array[7, null, 8, null], null, 0.5){7,0.5,8,0.5}

array_sort

按升序对数组的元素进行排序。

句法
array_sort ( array )array
示例
array_sort(array[-1000, 2000, 0]) → {-1000,0,2000}

array_sort(array['abcdef', 'aacedf', 'aaadef']) → {aaadef,aacedf,abcdef}

array_sort(array[3, 2, NULL, 1, NULL]) → {1,2,3,NULL,NULL}

array_sum

返回数组中数值的总和。空元素将被跳过。

句法
array_sum ( array )type of the elements
示例
array_sum(array[3, 2, NULL])5

array_sum(array[-10, 20, -30]) → -20

array_sum(array[interval'4 hour', interval'3 day'])'3 days 04:00:00'

array_to_string and array_join

将数组转换为字符串。可选的 delimiter_string 在生成的字符串中分隔数组元素,可选的 null_string 表示数组中的 NULL 元素。也可以使用 array_join 代替 array_to_string

句法
array_to_string ( array, delimiter_string, null_string ) → string 

array_join(array, delimiter_string, null_string) → string
示例
array_to_string (array[1, 2, 3, NULL, 5], ',', '*')1,2,3,*,5 

array_join(array[1, 2, 3, NULL, 5], ',', '*')1,2,3,*,5

array_transform

该函数接收一个数组,对其元素进行转换,并以新数组的形式返回结果。输出数组的长度始终与输入数组相同。

句法
array_transform ( array_expression, lambda_expression )

lambda_expression:
| element_alias | transform_expression

array_expression 中的每个元素都要根据 transform_expression 进行转换赋值。element_alias 是数组元素的别名。

示例 A
SELECT array_transform('{1,2,3}'::int[], |x| (x::double precision+0.5));
------返回结果
{1.5,2.5,3.5}
示例 B
SELECT array_transform(
ARRAY['Apple', 'Airbnb', 'Amazon', 'Facebook', 'Google', 'Microsoft', 'Netflix', 'Uber'],
|x| case when x ilike 'A%' then 'A' else 'Other' end
);
------返回结果
{A,A,A,Other,Other,Other,Other,Other}

请注意,transform_expression 不支持引用列。例如,如果有一个表:

CREATE TABLE t(v int, arr int[]);

以下查询将失败。

select array_transform(arr, |x| x + v) from t;

array_upper

返回 array 中请求的数组维度的上界。int 必须是 1。(返回与 array_length 相同的值。)

句法
array_upper ( array, int ) → int
示例
array_upper(array[array[2, 3, 4], array[3, 4, 5]], 1)2

cardinality

返回 array 的元素总数,如果数组为空则返回 0。

句法
cardinality ( array ) → int
示例
cardinality(array[array[array[3,4,5],array[2,2,2]],array[array[6,7,8],array[0,0,0]]])12

string_to_array

将字符串转换为数组。可选的 delimiter_string 会分隔 string 中的元素以创建数组,可选的 null_string 表示数组中的 NULL 元素。

句法
string_to_array ( string, delimiter_string, null_string ) → array
示例
string_to_array('a b c', ' ', 'a'){NULL,b,c}

trim_array

删除数组的最后 n 个元素。数组为多维时,则只删除第一个维度。

句法
trim_array ( array, num_of_elements_to_trim ) → array
示例
trim_array(array[1,2,3,4,5,NULL], 4){1,2}

unnest

将数组或数组组合扩展为一组行。数组元素将按存储顺序输出。

句法
unnest ( array ) → set_of_any_element
示例
unnest(Array[Array[1,3,4,5],Array[2,3]])
1
3
4
5
2
3

数组运算符

array @> array -> boolean

此运算符可检查左侧数组是否包含右侧数组的所有元素。

示例
array[1,2,3] @> array[2,3] → t

array <@ array -> boolean

此运算符可检查左侧数组是否被右侧数组包含。

示例
array[2,3] <@ array[1,2,3] → t

array || anycompatible → array

any_compatible 添加到 array 的末尾。此操作与使用 array_append 得到的结果相同。

示例
array[66] || 123{66, 123}

array || array → array

连接两个数据类型相同的数组。此操作与使用 array_cat 得到的结果相同。

示例
array[66] || array[123]{66, 123}

anycompatible || array → array

array 的开头添加 any_compatible。此操作与使用 array_prepend 得到的结果相同。

示例
123 || array[66]{123, 66}