PostgreSQL 的机会定义为可变长度的多维数组的列一个表。任何内置或用户定义的基本类型数组,枚举类型,或者可以创建复合型。
操作
声明
数组类型可以声明为:
CREATE TABLE monthly_savings ( name text, saving_per_quarter integer[], scheme text[][] );
或通过使用关键字“ARRAY”:
CREATE TABLE monthly_savings ( name text, saving_per_quarter integer ARRAY[4], scheme text[][] );
插入值
数组的值可以插入一个文本常量,内附大括号内的元素值,并用逗号将它们隔开。例子如下:
INSERT INTO monthly_savings VALUES ('Manisha', '{20000, 14600, 23500, 13250}', '{{"FD", "MF"}, {"FD", "Property"}}');
访问
用于访问阵列的一个例子如下所示。下面的命令将选择人员,他们存储在第二,第四个。
SELECT name FROM monhly_savings WHERE saving_per_quarter[2] > saving_per_quarter[4];
修改
修改数组的一个例子如下所示。
UPDATE monthly_savings SET saving_per_quarter = '{25000,25000,27000,27000}' WHERE name = 'Manisha';
或数组表达式语法:
UPDATE monthly_savings SET saving_per_quarter = ARRAY[25000,25000,27000,27000] WHERE name = 'Manisha';
寻找
搜索数组的一个例子如下所示。
SELECT * FROM monthly_savings WHERE saving_per_quarter[1] = 10000 OR saving_per_quarter[2] = 10000 OR saving_per_quarter[3] = 10000 OR saving_per_quarter[4] = 10000;
如果数组的大小是已知的上述搜索方法都可以使用。否则,下面的例子说明如何时要搜索的大小是不知道的。
SELECT * FROM monthly_savings WHERE 10000 = ANY (saving_per_quarter);
操作符
操作符 | 含义 | 示例 |
---|---|---|
=/<> | ARRAY[1,2,3] = ARRAY[1,2,3] | |
=/<> | ARRAY[1,2] = ARRAY[1,2,3] | |
=/<> | ARRAY[[1,2,3] = ARRAY[1,2,3] | |
=/<> | ARRAY[[1,2],[3,4]] = ARRAY[[3,4],[1,2]] | |
=/<> | ARRAY[1.1,2.2,3.3]::int[] = ARRAY[1,2,3] | |
> | ARRAY[1,1] < ARRAY[1,1,1] | |
> | ARRAY[1,2] < ARRAY[1,1,1] | |
> | ARRAY[1,2] < ARRAY[[1,2]] | |
> | ARRAY[1,3] < ARRAY[[1,2]] | |
> | ARRAY[1,2,3] < ARRAY[[1,2]] | |
> | ARRAY[1,2,3] < ARRAY[[1,2],[3,1]] | |
> | ARRAY[1,2,3] < ARRAY[[1,2],[2,1]] | |
<=/>= | ARRAY[1,2] >= ARRAY[[1,2]] | |
@>/<@ | 包含 | ARRAY[1, 2, 3] @> ARRAY[1, 2] |
@>/<@ | 包含 | ARRAY[[1, 2, 3]] @> ARRAY[[1, 2], [2, 3]] |
&& | 重叠 | ARRAY[1, 2, 3] && ARRAY[3, 4] |
&& | 重叠 | ARRAY[[1, 2], [3, 4]] && ARRAY[4, 5] |
|| | 连接 | ARRAY[1, 2] || ARRAY[3, 4] = ARRAY[1,2,3,4] |
|| | 连接 | ARRAY[1, 2] || ARRAY[[3, 4], [5, 6]] = [[1,2],[3,4],[5,6]] |
|| | 连接 | 1 || ARRAY[2, 3] = ARRAY[1, 2, 3] |
函数
名称 | 描述 | 示例 | 结果 |
---|---|---|---|
array_cat | 连接两个数组,返回新数组 | array_cat(ARRAY[1, 2], ARRAY[3, 4]) | [1,2,3,4] |
array_ndims | 返回数组的维度,返回值类型为 int | array_ndims(ARRAY[1, 2, 3]) | 1 |
array_length | 返回数组指定维度的长度,维度数是有由第二个参数指定的 | array_length(ARRAY[1, 2, 4], 1) | 3 |
array_lower | 返回数组的下标 | ||
array_upperer | 返回数组的上标 | ||
array_prepend | 在数组的开头插入一个元素 | array_prepend(7, ARRAY[8, 9]) | [7,8,9] |
array_remove | 移除数组中为指定值的元素,只支持一维数组 | array_remove(ARRAY[1, 2, 3], 2) | [1,3] |
array_replace | 把数组中等于指定值元素的值用另一个指定值替代 | array_replace(ARRAY[1, 4, 3], 4, 2) | [1,2,3] |
array_to_string | 使用指定的分隔符(第二个参数) 将数组元素连接为字符串 | array_to_string(ARRAY[1,2,3], ',') | '1,2,3' |
string_to_array | 用指定的分隔符分隔的字符串转成数组 | string_to_array('1,2,3', ',') | [1,2,3] |
unnest | 把数组变成多行返回 | ||
array_agg | 聚合函数 |