集合函数
generate_series()
PostgreSQL 中的 generate_series
() 函数是一个集合返回函数,可根据用户定义的起始值和结束值生成一系列值,适用于生成测试数据或创建数字或时间戳序列。
generate_series
() 函数的句法如下:
SELECT *
FROM generate_series(start, stop, step);
start、stop 和 step 可以是 integer、bigint、numeric 或 timestamp 类型。
start 是系列中的第一个值。
stop 是系列中的最后一个值。
除非 start 和 stop 类型为 timestamp,否则 step 为可选项。step 为增量值,若省略,则默认步长值为 1。
下面是一个如何使用 generate_series
() 函数生成一系列数字的示例:
SELECT *
FROM generate_series(1, 5);
结果如下:
1
2
3
4
5
下面是一个步长为 2 的示例:
SELECT *
FROM generate_series(2, 10, 2);
结果如下:
2
4
6
8
10
下面是如何使用 generate_series
() 函数生成一系列时间戳的示例:
SELECT generate_series
FROM generate_series(
'2008-03-01 00:00:00'::TIMESTAMP,
'2008-03-04 12:00:00'::TIMESTAMP,
interval '12' hour
);
结果如下:
2008-03-01 00:00:00
2008-03-01 12:00:00
2008-03-02 00:00:00
2008-03-02 12:00:00
2008-03-03 00:00:00
2008-03-03 12:00:00
2008-03-04 00:00:00
2008-03-04 12:00:00
range()
PostgreSQL 中的 range
() 函数是一个集合返回函数,可根据用户定义的起始值和结束值生成一系列值。与 generate_series()
不同的是,该函数不包含结束值,适用于生成测试数据或创建数字或时间戳序列。
range
() 函数的句法如下:
SELECT *
FROM range(start, stop, step);
start、stop 和 step 可以是 integer、bigint、numeric 或 timestamp 类型。
start 是系列中的第一个值。
stop 是系列中的最后一个值。
除非 start 和 stop 类型为 timestamp,否则 step 为可选项。step 为增量值,若省略,则默认步长值为 1。
下面是一个如何使用 range
() 函数生成一系列数字的示例:
SELECT *
FROM range(1, 4);
结果如下:
1
2
3
下面是一个步长为 0.5 的示例:
SELECT *
FROM range(0.1, 2.1, 0.5);
结果如下:
0.1
0.6
1.1
1.6
下面是如何使用 range
() 函数生成一系列时间戳的示例:
SELECT range
FROM range(
'2008-03-01 00:00:00'::TIMESTAMP,
'2008-03-04 12:00:00'::TIMESTAMP,
interval '12' hour
);
结果如下:
2008-03-01 00:00:00
2008-03-01 12:00:00
2008-03-02 00:00:00
2008-03-02 12:00:00
2008-03-03 00:00:00
2008-03-03 12:00:00
2008-03-04 00:00:00
_pg_expandarray()
_pg_expandarray
函数可接受一个数组作为输入,并将其扩展为一组行,提供数组中的值及其相应的索引。要访问 _pg_expandarray
函数,请确保 information_schema
在搜索路径中。
示例:
SELECT * FROM information_schema._pg_expandarray(Array['a','b','c']);
x | n
---+---
a | 1
b | 2
c | 3
(3 rows)
返回的组行中的列:
x:数组中的值。
n:数组中值的索引。