1、是什么&有何用?
generate_series()是DWS数据库继承自PG的一个内置函数,主要功能是自动生成一个指定范围内的序列,在构造模拟数据时经常用到。
2、怎么使用?
通用语法如下:
generate_series(start, stop, step) start是序列的起始值, stop是序列的结束值, step是序列的步长, start、stop和step可以是整数或日期。
使用案例:
1)生成整数序列 生成1-20的整数序列
drop table t1;
create table t1(a int,b int);
insert into t1 select generate_series(1,20), generate_series(1,20);
select * from t1;
生成20-1的整数序列
drop table t1;
create table t1(a int,b int);
insert into t1 select generate_series(20,1,-1), generate_series(20,1,-1);
select * from t1;
生成1-20,指定步长为2的整数序列
drop table t1;
create table t1(a int,b int);
insert into t1 select generate_series(1,20,2), generate_series(1,20,2);
select * from t1;
2)生成日期序列 生成2024-02-20 - 2024-03-05跨闰年2月的日期序列
drop table t2;
CREATE TABLE t2 (
date date,
amount integer
);
INSERT INTO t2 (date, amount)
SELECT generate_series('2024-02-20'::date, '2024-03-05'::date, '1 day'::interval),
floor(random() * 1000)::integer;
select * from t2;
生成2024-03-20 - 2024-04-05跨3月大月的日期序列
drop table t2;
CREATE TABLE t2 (
date date,
amount integer
);
INSERT INTO t2 (date, amount)
SELECT generate_series('2024-03-20'::date, '2024-04-05'::date, '1 day'::interval),
floor(random() * 1000)::integer;
select * from t2;
上述两个例子从结果可以看出输出的日期序列已自动处理闰年2月和大月的场景,可以放心使用。