自动生成序列函数-generate_series()使用总结

211 阅读2分钟

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月和大月的场景,可以放心使用。