数组函数和运算符
数组函数
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
返回 array 中 any_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
返回 array 中 any_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
是数组元素的别名。
SELECT array_transform('{1,2,3}'::int[], |x| (x::double precision+0.5));
------返回结果
{1.5,2.5,3.5}
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}