本文带你学习PostgreSQL Array 类型,包括如何操作数组类型以及一些常用函数。
Array类型
数组类型是 Postgresql
的重要角色之一。每种数据都有其伴随的数组类型,如integer 对应 integer[] ,character 对应 character[] 。针对自定义数据类型,PostgreSQL
在后台也创建了对应的伴随数组类型。
PostgreSQL
支持任何有效的数据类型列为数组类型,包括内置类型、用户定义类型、枚举类型。下面示例,定义contacts 表,phone 列定义为数组类型:
CREATE TABLE contacts (
id serial PRIMARY KEY,
name VARCHAR (100),
phones TEXT []
);
phone 列是一维数组,可以包括多个电话号码。
操作数组值
插入数组值
下面语句插入一条记录:
INSERT INTO contacts (name, phones)
VALUES('John Doe',ARRAY [ '(408)-589-5846','(408)-589-5555' ]);
这里使用ARRAY构造函数,也可以直接使用花括号:
INSERT INTO contacts (name, phones)
VALUES('Lily Bush','{"(408)-589-5841"}'),
('William Gate','{"(408)-589-5842","(408)-589-58423"}');
上面语句插入两条记录。需要注意的是使用花括号需要单引号包裹,因此里面内容需要两个引号进行转义。
查询数组数据
使用select 语句查询数组:
SELECT
name,
phones
FROM
contacts;
输出:
name | phones |
---|---|
John Doe | {(408)-589-5846,(408)-589-5555} |
Lily Bush | {(408)-589-5841} |
William Gate | {(408)-589-5842,(408)-589-58423} |
也可以通过[] 加上下标方式访问数组元素。PostgreSQL
访问数组元素是从1 开始。因此获取第一个电话使用 phone[1]:
SELECT
name,
phones [ 1 ]
FROM
contacts;
输出:
name | phones |
---|---|
John Doe | (408)-589-5846 |
Lily Bush | (408)-589-5841 |
William Gate | (408)-589-5842 |
也可以在where 条件总使用数据元素过滤记录。请看示例:
SELECT
name,phones[2]
FROM
contacts
WHERE
phones [ 2 ] = '(408)-589-58423';
输出:
name | phones |
---|---|
William Gate | (408)-589-58423 |
修改数组数据
我们也可以修改数组每个元素或整个数组。下面示例更新数组元素:
UPDATE contacts
SET phones [2] = '(408)-589-5843'
WHERE ID = 3;
更新整个数组值:
UPDATE contacts
SET phones = '{"(408)-589-5843"}'
WHERE id = 3;
检索数组
假设我们需要检查phones字段包括特定号码,并不关心是第几个元素,可以使用any() 函数:
SELECT
name,
phones
FROM
contacts
WHERE
'(408)-589-5555' = ANY (phones);
展开数组
unnest()
函数可以扩展数组为多行,请看示例:
SELECT
name,
unnest(phones)
FROM
contacts;
输出:
name | unnest |
---|---|
John Doe | (408)-589-5846 |
John Doe | (408)-589-5555 |
Lily Bush | (408)-589-5841 |
William Gate | (408)-589-5842 |
William Gate | (408)-589-58423 |
总结
本文学习 PostgreSQL
数组类型,并通过示例介绍一些数组常用操作及函数。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/118460543