数组函数和操作符

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 9. 函数和操作符 | 下一页

# 9.18. 数组函数和操作符

表 9-45显示了可以用于 array 类型的操作符。

表 9-45. Array 操作符

操作符 | 描述 | 例子 | 结果
--- | --- | --- | ---
`=` | 等于 | `ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3]` | `t`
`<>` | 不等于 | `ARRAY[1,2,3] <> ARRAY[1,2,4]` | `t`
`<` | 小于 | `ARRAY[1,2,3] < ARRAY[1,2,4]` | `t`
`>` | 大于 | `ARRAY[1,4,3] > ARRAY[1,2,4]` | `t`
`<=` | 小于或等于 | `ARRAY[1,2,3] <= ARRAY[1,2,3]` | `t`
`>=` | 大于或等于 | `ARRAY[1,4,3] >= ARRAY[1,4,3]` | `t`
`@>` | 包含 | `ARRAY[1,4,3] @> ARRAY[3,1]` | `t`
`<@` | 被包含于 | `ARRAY[2,7] <@ ARRAY[1,7,4,2,6]` | `t`
`&&` | 重叠(有共同元素) | `ARRAY[1,4,3] && ARRAY[2,1]` | `t`
`||` | 数组与数组连接 | `ARRAY[1,2,3] || ARRAY[4,5,6]` | `{1,2,3,4,5,6}`
`||` | 数组与数组连接 | `ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]]` | `{{1,2,3},{4,5,6},{7,8,9}}`
`||` | 元素与数组连接 | `3 || ARRAY[4,5,6]` | `{3,4,5,6}`
`||` | 数组与元素连接 | `ARRAY[4,5,6] || 7` | `{4,5,6,7}`

数组比较是使用默认的 B-Tree 比较函数对所有元素逐一进行比较的。 多维数组的元素按照行顺序进行访问(最后的下标变化最快)。如果两个数组的内容相同但维数不等， 那么决定排序顺序的首要因素将是维数(原文：the first difference in the dimensionality information determines the sort order)，这与PostgreSQL 8.2 之前的版本不同： 老版本认为内容相同的两个数组相等，即使它们的维数或下标范围并不相同。

参阅第 8.15 节获取有关数组操作符行为的更多细节。 参阅第 11.2 节获取哪个操作符支持索引操作的更多细节。

表 9-46显示了可以用于数组类型的函数。 参阅第 8.15 节获取更多信息以及使用这些函数的例子。

表 9-46. Array 函数

函数 | 返回类型 | 描述 | 例子 | 结果
--- | --- | --- | --- | ---
``array_append`(`anyarray`, `anyelement`)` | `anyarray` | 向数组末尾添加元素 | `array_append(ARRAY[1,2], 3)` | `{1,2,3}`
``array_cat`(`anyarray`, `anyarray`)` | `anyarray` | 连接两个数组 | `array_cat(ARRAY[1,2,3], ARRAY[4,5])` | `{1,2,3,4,5}`
``array_ndims`(`anyarray`)` | `int` | 返回数组的维数 | `array_ndims(ARRAY[[1,2,3], [4,5,6]])` | `2`
``array_dims`(`anyarray`)` | `text` | 返回数组维数的文本表示 | `array_dims(ARRAY[[1,2,3], [4,5,6]])` | `[1:2][1:3]`
``array_fill`(`anyelement`, `int[]`, [, `int[]`])` | `anyarray` | 返回数组初始化提供的值和维度，可选下界不是1 | `array_fill(7, ARRAY[3], ARRAY[2])` | `[2:4]={7,7,7}`
``array_length`(`anyarray`, `int`)` | `int` | 返回数组维度的长度 | `array_length(array[1,2,3], 1)` | `3`
``array_lower`(`anyarray`, `int`)` | `int` | 返回数组维数的下界 | `array_lower('[0:2]={1,2,3}'::int[], 1)` | `0`
``array_prepend`(`anyelement`, `anyarray`)` | `anyarray` | 向数组开头添加元素 | `array_prepend(1, ARRAY[2,3])` | `{1,2,3}`
``array_remove`(`anyarray`, `anyelement`)` | `anyarray` | 从数组中删除所有等于给定值的元素（数组必须是一维的） | `array_remove(ARRAY[1,2,3,2], 2)` | `{1,3}`
``array_replace`(`anyarray`, `anyelement`, `anyelement`)` | `anyarray` | 用新值替换每个等于给定值的数组元素 | `array_replace(ARRAY[1,2,5,4], 5, 3)` | `{1,2,3,4}`
``array_to_string`(`anyarray`, `text` [, `text`])` | `text` | 使用分隔符和null字符串连接数组元素 | `array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*')` | `1,2,3,*,5`
``array_upper`(`anyarray`, `int`)` | `int` | 返回数组维数的上界 | `array_upper(ARRAY[1,8,3,7], 1)` | `4`
``cardinality`(`anyarray`)` | `int` | 返回数组中的总元素数量，或者如果数组是空的则为0 | `cardinality(ARRAY[[1,2],[3,4]])` | `4`
``string_to_array`(`text`, `text` [, `text`])` | `text[]` | 使用指定的分隔符和null字符串把字符串分裂成数组元素 | `string_to_array('xx~^~yy~^~zz', '~^~', 'yy')` | `{xx,NULL,zz}`

``unnest`(`anyarray`)`

`setof anyelement`

扩大一个数组为一组行

`unnest(ARRAY[1,2])`

    1
    2

(2 rows)

``unnest`(`anyarray`, `anyarray` [, ...])`

`setof anyelement, anyelement [, ...]`

扩展多个数组（可能是不同的类型）到一组行。 仅在FROM子句中允许这样做；参阅 第 7.2.1.4 节

`unnest(ARRAY[1,2],ARRAY['foo','bar','baz'])`

    1    foo
    2    bar
    NULL baz

(3 rows)

在`string_to_array`中，如果分隔符参数是NULL， 输入字符串中的每个字符将在结果数组中变成一个独立的元素。如果分隔符是一个空白字符串， 那么整个输入字符串将变为一元素的数组。否则输入字符串将在每个分隔字符串处分裂。

在`string_to_array`中，如果省略null字符串参数或为NULL， 将没有输入字符串的子串被NULL代替。在`array_to_string`中， 如果省略null字符串参数或为NULL，在数组中的任何null元素将简单的跳过， 并且不再输出字符串中出现。

> 注意: 在PostgreSQL版本9.1之前，`string_to_array`有两个行为上的不同。 第一，当输入字符串长度为零时，它将返回一个空（零元素）数组而不是NULL。第二， 如果分隔字符串是NULL时，函数分隔输入为单独的字符，而不是和以前一样返回NULL。

也可以参阅第 9.20 节获取关于 `array_agg`聚合函数使用数组的信息。

上一页 | 起始页 | 下一页
条件表达式 | 上一级 | 范围函数和操作符