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月的博文