Skip to content

PostgreSQL generate_series() 函数 ​

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

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

generate_series() 语法 ​

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

sql
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

    可选的。 步长。 如果 start 和 stop 是数字类型, 它应该和他们数据类型相同,并且是可选的,它的默认值是 1。 如果 start 和 stop 是时间戳类型,它应该是 interval 类型的数据,并且是必须的。

返回值 ​

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

generate_series() 实例 ​

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

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

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

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

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

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

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

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

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

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

sql
SELECT generate_series(
    '2022-06-06'::timestamp,
    '2022-06-10',
    '12 hours');
bash
   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