9.19. 数组函数和操作符 #
表 9.51 显示了可以用于数组类型的专用的操作符。除此之外,表 9.1 中所示的常用比较操作符也适用于数组。比较操作符逐个元素比较数组内容,使用元素数据类型的默认 B-树比较函数,并根据第一个差异进行排序。多维数组的元素按照行序进行访问(最后的下标变化最快)。如果两个数组的内容相同但维度信息不同,那么维度信息中的第一个不同将决定排序顺序。(这与 PostgreSQL 8.2 之前的版本有所不同:旧版本会认为内容相同的两个数组相等,即使它们的维数或下标范围不同。)
表 9.51. 数组操作符
操作符 描述 示例 |
|---|
第一个数组是否包含第二个数组,也就是说,出现在第二个数组中的每个元素是否等于第一个数组中的某个元素?(重复元素不作特殊处理,因此
|
第一个数组包含在第二个数组中么?
|
这些数组有重叠么,也就是说,它们有共同的元素么?
|
连接两个数组。连接 null 或空数组不会产生任何效果;否则,数组必须具有相同的维数(如第一个示例所示),或维数相差一维(如第二个示例所示)。
|
将元素连接到数组的前面(数组必须为空或一维的)。
|
将元素连接到数组的末尾(数组必须为空或一维)。
|
参阅第 8.15 节获取有关数组操作符行为的更多细节。有关哪些操作符支持索引操作,请参阅第 11.2 节。
表 9.52 展示了可以用于数组类型的函数。参阅第 8.15 节获取更多信息以及使用这些函数的示例。
表 9.52. 数组函数
函数 描述 示例 |
|---|
向一个数组的末端追加一个元素 (等同于
|
连接两个数组(等同于
|
返回数组维度的文本表示形式。
|
返回用给定值的副本填充的数组,各维的长度由第二个参数指定。可选的第三个参数提供各维的下界值(默认均为
|
返回请求的数组维度的长度。(对于空或缺失的数组维度,返回 NULL 而不是 0。)
|
返回请求的数组维度的下界。
|
返回数组的维度数。
|
返回第二个参数在数组中首次出现的下标;若不存在,则返回
|
返回第二个参数在第一个参数所给数组中所有出现位置的下标数组。数组必须是一维的。使用
|
在数组的开头添加一个元素(等同于
|
从数组中移除与给定值相等的所有元素。数组必须是一维的。使用
|
将等于第二个参数的每个数组元素替换为第三个参数。
|
将每个数组元素转换为其文本表示,并将它们用
|
返回请求的数组维度的上界。
|
返回数组中元素的总数,如果数组为空则返回 0。
|
在
|
将数组展开到一组行。数组的元素按存储顺序读出。
1 2
foo bar baz quux
|
将多个数组(可能是不同的数据类型)展开到一组行中。如果数组的长度不完全相同,那么较短的数组将用
a | b ---+----- 1 | foo 2 | bar | baz
|
注意
string_to_array 的行为与 PostgreSQL 9.1 之前的版本有两点不同。首先,输入字符串长度为零时,它返回空数组(零个元素),而不是 NULL。其次,如果分隔符字符串为 NULL,该函数会将输入拆分为单个字符,而不像以前那样返回 NULL。
也可参见第 9.21 节了解用于数组的聚合函数 array_agg。