generate_series() 是一个用于生成一系列值(数值或基于时间的)的系统函数。
generate_series() 于 PostgreSQL 8.0 中添加。
用法
generate_series (startinteger,stopinteger[,stepinteger] ) → setofinteger
generate_series (startbigint,stopbigint[,stepbigint] ) → setofbigint
generate_series (startnumeric,stopnumeric[,stepnumeric] ) → setofnumeric
generate_series (starttimestamp,stoptimestamp,stepinterval) → setoftimestamp
PostgreSQL 16 及更高版本
generate_series (starttimestamp with time zone,stoptimestamp with time zone,stepinterval[,timezonetext] )
→ setoftimestamp with time zone
PostgreSQL 15 及更早版本
generate_series (starttimestamp with time zone,stoptimestamp with time zone,stepinterval)
→ 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() 生成更真实的时间序列样本数据 - 2021 年 11 月,Ryan Booz / Timescale 的博客文章
