PostgreSQL Array 教程

本文介绍了PostgreSQL中的数组类型,展示了如何创建和操作数组,包括插入、查询、修改数组值,以及使用any()和unnest()函数。通过实例详细解释了如何在where子句中过滤和展开数组数据。

本文带你学习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;

输出:

namephones
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;

输出:

namephones
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';

输出:

namephones
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;

输出:

nameunnest
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 数组类型,并通过示例介绍一些数组常用操作及函数。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值