文档

数组函数和操作符

更新时间:

本文介绍了PolarDB PostgreSQL版(兼容Oracle)支持的数组操作符和数组函数。

数组操作符

数组函数表展示了可以用于数组类型的函数。

数组函数

  1. 第一个数组是否包含第二个数组,也就是说,出现在第二个数组中的每个元素是否等于第一个数组中的某个元素。重复值不需要特殊处理,因此 ARRAY[1] 和 ARRAY[1,1]被认为包含对方,即:

anyarray @> anyarray → boolean
ARRAY[1,4,3] @> ARRAY[3,1,3] → t
  1. 第一个数组是否包含在第二个数组中:

anyarray <@ anyarray → boolean
ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6] → t
  1. 数组是否有重叠,或者说数组间是否有共同的元素:

anyarray && anyarray → boolean
ARRAY[1,4,3] && ARRAY[2,1] → t
  1. 连接两个数组。连接空(null)或空数组是一个无操作(no-op);否则,数组必须具有相同的维度数(如第一个示例所示),或者维度数相差一个(如第二个示例所示)。

anyarray || anyarray → anyarray
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]] → {{1,2,3},{4,5,6},{7,8,9}}
  1. 将元素连接到数组的前面(数组必须为空或一维的[one-dimensional])。

anyelement || anyarray → anyarray
3 || ARRAY[4,5,6] → {3,4,5,6}
  1. 将元素连接到数组的末尾(数组必须为空或一维的[one-dimensional])。

anyarray || anyelement → anyarray
ARRAY[4,5,6] || 7 → {4,5,6,7}

函数

  1. 向一个数组的末端追加一个元素(等同于 anyarray || anyelement 操作符)。

array_append ( anyarray, anyelement ) → anyarray
array_append(ARRAY[1,2], 3) → {1,2,3}
  1. 连接两个数组(等同于 anyarray || anyarray 操作符)。

array_cat ( anyarray, anyarray ) → anyarray
array_cat(ARRAY[1,2,3], ARRAY[4,5]) → {1,2,3,4,5}
  1. 返回数组维度的文本表示形式。

array_dims ( anyarray ) → text
array_dims(ARRAY[[1,2,3], [4,5,6]]) → [1:2][1:3]
  1. 返回一个包含给定值的拷贝的数组,其维数与第二个参数指定的长度相同。 可选的第三个参数提供每个维度的下界值(默认为全部为1)。

array_fill ( anyelement, integer[] [, integer[] ] ) → anyarray
array_fill(11, ARRAY[2,3]) → {{11,11,11},{11,11,11}}
array_fill(7, ARRAY[3], ARRAY[2]) → [2:4]={7,7,7}
  1. 返回请求的数组维度的长度。

array_length ( anyarray, integer ) → integer
array_length(array[1,2,3], 1) → 3
  1. 返回请求的数组维度的下界。

array_lower ( anyarray, integer ) → integer
array_lower('[0:2]={1,2,3}'::integer[], 1) → 0
  1. 返回数组的维度数。

array_ndims ( anyarray ) → integer
array_ndims(ARRAY[[1,2,3], [4,5,6]]) → 2
  1. 返回阵列中第二个参数中第一次发生的下标,如果它不存在,则返回 NULL。 如果给出了第三个参数,则搜索从该下标开始。数组必须是一维的。比较是使用 IS NOT DISTINCT FROM 语义进行的,所以可以搜索 NULL。

array_position ( anyarray, anyelement [, integer ] ) → integer
array_position(ARRAY['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], 'mon') → 2
  1. 返回作为第一个参数的数组中第二个参数所有出现的下标的数组。数组必须是一维的。使用 IS NOT DISTINCT FROM 语义完成比较,所以可以搜索 NULL。 只有当数组为 NULL 时才返回 NULL;如果在数组中没有找到该值,则返回空数组。

array_positions ( anyarray, anyelement ) → integer[]
array_positions(ARRAY['A','A','B','A'], 'A') → {1,2,4}
  1. 在数组的开头添加一个元素(等同于 anyelement || anyarray 操作符)。

array_prepend ( anyelement, anyarray ) → anyarray
array_prepend(1, ARRAY[2,3]) → {1,2,3}
  1. 从数组中移除与给定值相等的所有元素。数组必须是一维的。使用 IS NOT DISTINCT FROM 语义完成比较,所以可以删除 NULL。

array_remove ( anyarray, anyelement ) → anyarray
array_remove(ARRAY[1,2,3,2], 2) → {1,3}
  1. 将等于第二个参数的每个数组元素替换为第三个参数。

array_replace ( anyarray, anyelement, anyelement ) → anyarray
array_replace(ARRAY[1,2,5,4], 5, 3) → {1,2,3,4}
  1. 将每个数组元素转换为它的文本表现形式,并连接由 delimiter 符字符串分隔的元素。 如果给出了 null_string 且不为 NULL,则 NULL 数组项由该字符串表示;否则,它们将被省略。

array_to_string ( array anyarray, delimiter text [, null_string text ] ) → text
array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') → 1,2,3,*,5
  1. 返回请求的数组维度的上界。

array_upper ( anyarray, integer ) → integer
array_upper(ARRAY[1,8,3,7], 1) → 4
  1. 返回数组中元素的总数,如果数组为空则返回 0。

cardinality ( anyarray ) → integer
cardinality(ARRAY[[1,2],[3,4]]) → 4
  1. 在出现分隔符时拆分字符串,并将剩余数据形成文本数组。 如果分隔符为 NULL,则字符串中的每个字符将成为数组中的单独元素。 如果分隔符为空字符串,则该字符串视为单个字段。 如果提供了 null_string 且不为 NULL,那么匹配该字符串的字段将被转换为 NULL 项。

string_to_array ( string text, delimiter text [, null_string text ] ) → text[]
string_to_array('xx~~yy~~zz', '~~', 'yy') → {xx,NULL,zz}
  1. 将数组展开为一组行。

unnest ( anyarray ) → setof anyelement
unnest(ARRAY[1,2]) →
 1
 2
  1. 将多个数组(可能是不同的数据类型)展开为一组行。 如果数组的长度不完全相同,那么较短的数组将用 NULL 填充。 这只在查询的 FROM 子句中允许。

unnest ( anyarray, anyarray [, ... ] ) → setof anyelement, anyelement [, ... ]
select * from unnest(ARRAY[1,2], ARRAY['foo','bar','baz']) as x(a,b) →
 a |  b
---+-----
 1 | foo
 2 | bar
   | baz