generate_series()
是一个用于生成一系列值(数值型或时间型)的系统函数。
generate_series()
在 PostgreSQL 8.0 中添加。
用法
generate_series (start
integer
,stop
integer
[,step
integer
] ) → setofinteger
generate_series (start
bigint
,stop
bigint
[,step
bigint
] ) → setofbigint
generate_series (start
numeric
,stop
numeric
[,step
numeric
] ) → setofnumeric
generate_series (start
timestamp
,stop
timestamp
,step
interval
) → setoftimestamp
PostgreSQL 16 及更高版本
generate_series (start
timestamp with time zone
,stop
timestamp with time zone
,step
interval
[,timezone
text
] )
→ setoftimestamp with time zone
PostgreSQL 15 及更早版本
generate_series (start
timestamp with time zone
,stop
timestamp with time zone
,step
interval
)
→ setoftimestamp with time zone
变更历史
- PostgreSQL 16
- 添加了计算指定时区中时间戳序列的每日时间和夏令时的变体(提交 75bd846b)
- PostgreSQL 9.5
- PostgreSQL 8.4
- 添加了返回
TIMESTAMP
/TIMESTAMPTZ
系列的变体(提交 b6d15590)
- 添加了返回
- PostgreSQL 8.0
- 添加(提交 12661642)
示例
generate_series()
的基本执行
postgres=# SELECT generate_series(1, 5); generate_series ----------------- 1 2 3 4 5 (5 rows)
生成降序序列
postgres=# SELECT * FROM generate_series(5, 1, -1); generate_series ----------------- 5 4 3 2 1 (5 rows)
生成一系列时间戳
postgres=# SELECT * FROM generate_series(current_timestamp, current_timestamp + '5 minutes'::interval, '1 minute'::interval); generate_series ------------------------------- 2021-02-08 09:05:21.455263+01 2021-02-08 09:06:21.455263+01 2021-02-08 09:07:21.455263+01 2021-02-08 09:08:21.455263+01 2021-02-08 09:09:21.455263+01 2021-02-08 09:10:21.455263+01 (6 rows)
参考
- PostgreSQL 文档: 系列生成函数
有用链接
- 使用 PostgreSQL generate_series() 生成更逼真的示例时间序列数据 - Ryan Booz / Timescale 于 2021 年 11 月发布的博文