Postgresql 中文操作指南
9.19. Array Functions and Operators #
Table 9.53 显示了可用于数组类型的特殊运算符。除了那些运算符之外, Table 9.1 中显示的通常比较运算符也可用于数组。比较运算符逐个元素比较数组内容,使用元素数据类型的默认 B 树比较函数,然后根据第一个差异进行分类。在多维数组中,按行优先顺序访问元素(最后一个下标变化最快)。如果两个数组的内容相等,但维度不同,则维度信息中的第一个差异决定了分类顺序。
Table 9.53. Array Operators
Operator Description Example(s) |
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 连接两个数组。连接一个空数组或一个空数组时,什么也不执行;否则,这些数组的维数必须相同(第一个示例中已说明),或者维数相差一(第二个示例中已说明)。如果这些数组的元素类型不相同,则强制转换为公共类型(请参阅 Section 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 _ |
_ anycompatiblearray → anycompatiblearray 连接一个元素到一个数组的开头(该数组必须为空或一维)。_3 |
ARRAY[4,5,6]_ → {3,4,5,6} |
anycompatiblearray _ |
_ anycompatible → anycompatiblearray 连接一个元素到一个数组的末尾(该数组必须为空或一维)。_ARRAY[4,5,6] |
7_ → {4,5,6,7} |
请参阅 Section 8.15 以了解有关数组运算符的行为的更多详细信息。请参阅 Section 11.2 以了解有关支持索引运算的运算符的更多详细信息。
Table 9.54 中显示了可用于数组类型的函数。请参阅 Section 8.15 以了解有关这些函数的用法以及示例的更多信息。
Table 9.54. Array Functions
Function Description Example(s) |
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 返回请求数组维度的长度。(对于空或缺失的维度,会产生 NULL,而不是 0。) 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_sample ( array anyarray , n integer ) → anyarray 返回一个数组,其中 n 为从 array 中随机选择的项目。 n 可能不会超过 array 的第一个维度的长度。如果 array 是多维的,“项目”则是一个切片,具有给定的第一个下标。 array_sample(ARRAY[1,2,3,4,5,6], 3) → {2,6,1} array_sample(ARRAY[[1,2],[3,4],[5,6]], 2) → {{5,6},{1,2}} |
array_shuffle ( anyarray ) → anyarray 随机打乱数组的第一维。 array_shuffle(ARRAY[[1,2],[3,4],[5,6]]) → {{5,6},{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 子句中使用;请参阅 Section 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 |
另请参阅 Section 9.21关于与数组一起使用的聚合函数_array_agg_。