PostgreSQL:数组——类型、运算符和函数

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 聚合函数
请使用浏览器的分享功能分享到微信等