PostgreSQL generate_series() 函数使用指南

PostgreSQL generate_series() 函数根据指定的开始值、结束值和步长返回一个基于系列的集合。

比如,您可以使用 generate_series() 函数产生一个包含 1 ... 5 的集合。

generate_series() 语法

这里是 PostgreSQL generate_series() 函数的语法:

generate_series(start, stop[, step]) -> setof

参数

start
必需的。 起始值。 它可以是 integer, bigint, numeric, timestamp, timestamp with time zone 类型的值。
stop
必需的。 结束值。 它可以是 integer, bigint, numeric, timestamp, timestamp with time zone 类型的值。它的数据类型应该和 start 参数相同。
step
可选的。 步长。 如果 startstop 是数字类型, 它应该和他们数据类型相同,并且是可选的,它的默认值是 1。 如果 startstop 是时间戳类型,它应该是 interval 类型的数据,并且是必须的。

返回值

PostgreSQL generate_series() 函数返回一个包含了多行的集合。

generate_series() 实例

这里整理了一些 generate_series() 函数的示例。

要产生一个包含了 1 到 5 中间所有整数的集合,请使用以下语句:

SELECT generate_series(1, 5);
 generate_series
-----------------
               1
               2
               3
               4
               5

您可以为 generate_series 指定一个别名,如下:

SELECT generate_series(1, 5) AS i;
 i
---
 1
 2
 3
 4
 5

要产生一个包含了 5 到 1 中间所有整数的集合,请使用以下语句:

SELECT generate_series(5, 1, -1);
 generate_series
-----------------
               5
               4
               3
               2
               1

要产生一个包含了 1 到 5 中间间隔为 1.1 的所有数字的集合,请使用以下语句:

SELECT generate_series(1, 5, 1.1);
 generate_series
-----------------
               1
             2.1
             3.2
             4.3

要产生一个包含了 2022-06-062022-06-10 之间间隔为 12 小时的所有时间的集合,请使用以下语句:

SELECT generate_series(
    '2022-06-06'::timestamp, 
    '2022-06-10',
    '12 hours');
   generate_series
---------------------
 2022-06-06 00:00:00
 2022-06-06 12:00:00
 2022-06-07 00:00:00
 2022-06-07 12:00:00
 2022-06-08 00:00:00
 2022-06-08 12:00:00
 2022-06-09 00:00:00
 2022-06-09 12:00:00
 2022-06-10 00:00:00