一、简介

PostgreSQL 中有一个很有用处的内置函数generate_series,可以按不同的规则产生一系列的填充数据。

二、语法

函数 参数类型 返回类型 描述
generate_series(start, stop) int 或 bigint setof int 或 setof bigint(与参数类型相同) 生成一个数值序列,从start 到 stop,步进为一
generate_series(start, stop, step) int 或 bigint setof int 或 setof bigint(与参数类型相同) 生成一个数值序列,从start 到 stop,步进为step
generate_series(start, stop, step_interval) timestamp or timestamp with time zone timestamp 或 timestamp with time zone(same as argument type) 生成一个数值序列,从start 到 stop,步进为step

三、实例 型

a. 不写步进时默认为1

david=# select generate_series(1, 10);generate_series
-----------------12345678910
(10 rows)david=# 

b. 设置步进

david=# select generate_series(1, 10, 3);generate_series
-----------------14710
(4 rows)david=# 

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

david=# select generate_series(5,1);generate_series
-----------------
(0 rows)david=# 

NULL inputs

david=# select generate_series(5,null);generate_series
-----------------
(0 rows)david=#

step 为零

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

start 大于stop,step 是负数

david=# select generate_series(5,1,-1);generate_series
-----------------54321
(5 rows)david=#

3.2) 时间类型

david=# select generate_series(now(), now() + '7 days', '1 day');generate_series
-------------------------------2013-04-03 14:22:26.391852+082013-04-04 14:22:26.391852+082013-04-05 14:22:26.391852+082013-04-06 14:22:26.391852+082013-04-07 14:22:26.391852+082013-04-08 14:22:26.391852+082013-04-09 14:22:26.391852+082013-04-10 14:22:26.391852+08
(8 rows)david=#
david=# select generate_series(to_date('20130403','yyyymmdd'), to_date('20130404','yyyymmdd'), '3 hours');  generate_series
------------------------2013-04-03 00:00:00+082013-04-03 03:00:00+082013-04-03 06:00:00+082013-04-03 09:00:00+082013-04-03 12:00:00+082013-04-03 15:00:00+082013-04-03 18:00:00+082013-04-03 21:00:00+082013-04-04 00:00:00+08
(9 rows)david=#

3.3) IP类型

a. 建表

david=# create table tbl_david(id int, ip_start inet, ip_stop inet);
CREATE TABLE
david=#

b. 插入数据

david=# insert into tbl_david values (1, '192.168.1.6', '192.168.1.10');
INSERT 0 1
david=# insert into tbl_david values (2, '192.168.2.16', '192.168.2.20');
INSERT 0 1
david=# insert into tbl_david values (3, '192.168.3.116', '192.168.3.120');
INSERT 0 1
david=#

c. 查看数据

david=# select * from tbl_david ;id |   ip_start    |    ip_stop
----+---------------+---------------1 | 192.168.1.6   | 192.168.1.102 | 192.168.2.16  | 192.168.2.203 | 192.168.3.116 | 192.168.3.120
(3 rows)david=#

d. generate_series 生成序列

david=# select id, generate_series(0, ip_stop-ip_start)+ip_start as ip_new from tbl_david ;id |    ip_new
----+---------------1 | 192.168.1.61 | 192.168.1.71 | 192.168.1.81 | 192.168.1.91 | 192.168.1.102 | 192.168.2.162 | 192.168.2.172 | 192.168.2.182 | 192.168.2.192 | 192.168.2.203 | 192.168.3.1163 | 192.168.3.1173 | 192.168.3.1183 | 192.168.3.1193 | 192.168.3.120
(15 rows)david=#

四、总结

PostgreSQL的generate_series函数对生成测试数据,批量更新一定规则的数据有比较多的应用场景,使用得当可提升开发效率,另外IP的序列生成也是PG的一个亮点。

五、参考

  • PostgreSQL官方文档:http://www.postgresql.org/docs/9.2/static/functions-srf.html
  • kenyon的个人页面:http://my.oschina.net/Kenyon/blog/75099

PostgreSQL的generate_series函数应用相关推荐

  1. PostgreSQL的generate_series函数应用例子

    为什么80%的码农都做不了架构师?>>>    Pg中有一个很有用处的内置函数generate_series,可以按不同的规则用来产生一系列的填充数据. 一.语法 generate_ ...

  2. postgreSQL 的generate_series函数

    Series Generating Functions http://www.postgresql.org/docs/9.4/static/functions-srf.html

  3. PostgreSQL使用generate_series函数 填充数据(插入数据)

    select x, y, generate_series(-1,1) as x_g, value from test_mov_avg 细看 https://www.cnblogs.com/mchina ...

  4. PostgreSQL的generate_series的函数应用

    一.简介 PostgreSQL 中有一个很有用的内置函数generate_series,可以按不同的规则产生一系列的填充数据. 二.语法 函数 参数类型 返回类型 描述 generate_series ...

  5. Postgresql generate_series函数使用

    generate_series函数使用 文章目录 generate_series函数使用 **一.简介** **二.语法** **三.实例 3.1) int 类型 3.2) 时间类型 3.3) IP类 ...

  6. PostgreSQL 字符串分隔函数(regexp_split_to_table、regexp_split_to_array)  发表于 2020-06-01 |  阅读次数: 394

    转载:https://zhangzw.com/posts/20200601.html PostgreSQL 字符串分隔函数(regexp_split_to_table.regexp_split_to_ ...

  7. mysql反三角函数,PostgreSQL中的函数之数学函数(正弦函数、反正弦函数、余弦函数、反余弦函数)...

    在PostgreSQL的数学函数中,也包括了几个三角函数:正弦函数.反正弦函数.余弦函数.反余弦函数. 1. 正弦函数:SIN(x) SIN(x) SIN(x)会返回x的正弦值,x为弧度. 例如,使用 ...

  8. Oracle、Postgresql 中round函数的用法说明

    首先我们来说下这个Oracle中的round函数 Oracle round 函数的意思是四舍五入的方法,即传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果,参数 number 是指需要 ...

  9. PG中 generate_series函数的使用

    generate_series函数的使用 语法 实例 实例2 语法 实例 一次使用一遍 select generate_series(3,5); 结果如下: 一次使用两遍 间距相同 select ge ...

最新文章

  1. linux下怎么卸载ogg,OGG在Linux上的安装
  2. C#XmlDocument无法读取utf-16文件
  3. iOS.ReactNative-3-about-viewmanager-uimanager-and-bridgemodule
  4. 香港中文大计算机科学系电话,港大和港中文计算机科学系2021年提前批招生开启!...
  5. 红亚科技联手董付国老师开启Python实训教育新篇章
  6. 一个前端博客(9)——浏览器检测和加载
  7. php mac安装grpc扩展,Mac使用pecl安装grpc报错:Warning:mkdir():File exists in System.php
  8. Activiti7入门,Activiti7 数据库表结构详细解析
  9. ACM解题总结——HihoCoder1200 (微软笔试题)
  10. 移动硬盘安装manjaro 20.2以及常用软件安装
  11. matlab 菱形符号,matlab 图形符号
  12. python获取12306火车票_Python脚本实现12306火车票查询系统
  13. 马化腾和朱啸虎互怼之后,摩拜ofo合并可能性基本为零
  14. 「π」里藏着所有人的银行卡密码和生日?
  15. D. Rescue Nibel(cf) 区间覆盖 + 组合数学
  16. 什么是网关,网关的作用是什么
  17. 操作系统-存储器管理实验
  18. css 画小黄人,纯CSS3画出小黄人并实现动画效果
  19. 服务器显示post是什么意思,post请求 post请求是什么
  20. VMware虚拟机安装macos Big Sur 11.2.2 (20D80)镜像CDR/ISO下载

热门文章

  1. 二叉树的查找 Java
  2. 计算机显卡发展史,NVIDIAPCIE计算机显卡发展史.doc
  3. 北大、清华教授在线分享,机器人视觉、城市智能管理等主题报告,邀您“在线+免费”观看...
  4. 兰州大学计算机专业复试流程,兰大计算机复试相关事宜
  5. 一天4个个人记录,哇嘎嘎
  6. 互联网商业模式的创新
  7. Springcloud----SkyWalking链路追踪
  8. 如何恰当使用计算机辅助教学,计算机辅助教学
  9. 已知W1∩W2的一组基,将它扩充为W1+W2的一组基
  10. 2021年前端面试题(附带答案)