跳转到内容

展开数组并返回元素集合。

func.unnest( <array> )
func.unnest([1, 2])
┌──────────────────────┐
│ func.unnest([1, 2]) │
├──────────────────────┤
│ 1 │
│ 2 │
└──────────────────────┘
UNNEST( <array> )
SELECT UNNEST([1, 2]);
┌─────────────────┐
│ unnest([1, 2]) │
├─────────────────┤
│ 1 │
│ 2 │
└─────────────────┘
-- UNNEST(array) can be used as a table function.
SELECT * FROM UNNEST([1, 2]);
┌─────────────────┐
│ value │
├─────────────────┤
│ 1 │
│ 2 │
└─────────────────┘

在下面的示例中,将使用名为 contacts 的表,其 phones 列定义为文本数组。

CREATE TABLE contacts (
id SERIAL PRIMARY KEY,
name VARCHAR (100),
phones TEXT []
);

phones 列是一个一维数组,保存联系人可能拥有的各种电话号码。

要定义多维数组,请添加方括号。

例如,可以按如下方式定义二维数组:

column_name data_type [][]

向该表插入数据的示例

INSERT INTO contacts (name, phones)
VALUES('John Doe',ARRAY [ '(408)-589-5846','(408)-589-5555' ]);

或

INSERT INTO contacts (name, phones)
VALUES('Lily Bush','{"(408)-589-5841"}'),
('William Gate','{"(408)-589-5842","(408)-589-5843"}');

unnest() 函数会将数组展开为多行。例如,下面的查询会展开 phones 数组中的所有电话号码。

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-5843