generate_series(适用于GP)用法解析

generate_series(GP):可以按不同的规则产生一系列的填充数据

Int类型

(1)generate_series(start, stop,—)生成一个数值序列,从start 到 stop,步进为 —
  实例:

       不写步进时默认为1

select generate_series(1, 10);
 generate_series 
-----------------
               1
               2
               3
               4
               5
               6
               7
               8
               9
              10
(10 rows)

2) generate_series(start, stop,step)生成一个数值序列,从start 到 stop,步进为 step

设置步进函数

select generate_series(1, 10, 3);
 generate_series 
-----------------
               1
               4
               7
              10
(4 rows)  

如果step 是正数,而start 大于stop,那么返回零行。相反,如果step 是负数,start 小于stop,则返回零行。如果是NULL 输入,也产生零行。step 为零则是一个错误

 start 大于stop

select generate_series(5,1);
 generate_series 
-----------------
(0 rows)

stop 为空 NULL

 select generate_series(5,null);
 generate_series 
-----------------
(0 rows)

start 大于stop ,step 为零

select generate_series(5,1,0);
ERROR:  step size cannot equal zero

start 大于stop ,step 为负数

select generate_series(5,1,-1);
generate_series
-----------------
               5
               4
               3
               2
               1
(5 rows)


时间类型(24小时切割)

select
    generate_series(date_trunc('day', now()-interval '7 hour') + interval '7 hour',
    date_trunc('day', now()-interval '7 hour') + interval '31 hour','1 hour') as fab_date
  
-------------------------------
 2021-11-29 07:00:00
2021-11-29 08:00:00
2021-11-29 09:00:00
2021-11-29 10:00:00
2021-11-29 11:00:00
2021-11-29 12:00:00
2021-11-29 13:00:00
2021-11-29 14:00:00
2021-11-29 15:00:00
2021-11-29 16:00:00
2021-11-29 17:00:00
2021-11-29 18:00:00
2021-11-29 19:00:00
2021-11-29 20:00:00
2021-11-29 21:00:00
2021-11-29 22:00:00
2021-11-29 23:00:00
2021-11-30 00:00:00
2021-11-30 01:00:00
2021-11-30 02:00:00
2021-11-30 03:00:00
2021-11-30 04:00:00
2021-11-30 05:00:00
2021-11-30 06:00:00
(24 rows)

总结:

PostgreSQL的generate_series函数对生成测试数据,批量更新一定规则的数据有比较多的应用场景,使用得当可提升开发效率。

猜你喜欢

转载自blog.csdn.net/qq_45967480/article/details/121603216