PostgreSQL的generate_series函数应用
一、简介
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函数应用相关推荐
- PostgreSQL的generate_series函数应用例子
为什么80%的码农都做不了架构师?>>> Pg中有一个很有用处的内置函数generate_series,可以按不同的规则用来产生一系列的填充数据. 一.语法 generate_ ...
- postgreSQL 的generate_series函数
Series Generating Functions http://www.postgresql.org/docs/9.4/static/functions-srf.html
- PostgreSQL使用generate_series函数 填充数据(插入数据)
select x, y, generate_series(-1,1) as x_g, value from test_mov_avg 细看 https://www.cnblogs.com/mchina ...
- PostgreSQL的generate_series的函数应用
一.简介 PostgreSQL 中有一个很有用的内置函数generate_series,可以按不同的规则产生一系列的填充数据. 二.语法 函数 参数类型 返回类型 描述 generate_series ...
- Postgresql generate_series函数使用
generate_series函数使用 文章目录 generate_series函数使用 **一.简介** **二.语法** **三.实例 3.1) int 类型 3.2) 时间类型 3.3) IP类 ...
- 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_ ...
- mysql反三角函数,PostgreSQL中的函数之数学函数(正弦函数、反正弦函数、余弦函数、反余弦函数)...
在PostgreSQL的数学函数中,也包括了几个三角函数:正弦函数.反正弦函数.余弦函数.反余弦函数. 1. 正弦函数:SIN(x) SIN(x) SIN(x)会返回x的正弦值,x为弧度. 例如,使用 ...
- Oracle、Postgresql 中round函数的用法说明
首先我们来说下这个Oracle中的round函数 Oracle round 函数的意思是四舍五入的方法,即传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果,参数 number 是指需要 ...
- PG中 generate_series函数的使用
generate_series函数的使用 语法 实例 实例2 语法 实例 一次使用一遍 select generate_series(3,5); 结果如下: 一次使用两遍 间距相同 select ge ...
最新文章
- linux下怎么卸载ogg,OGG在Linux上的安装
- C#XmlDocument无法读取utf-16文件
- iOS.ReactNative-3-about-viewmanager-uimanager-and-bridgemodule
- 香港中文大计算机科学系电话,港大和港中文计算机科学系2021年提前批招生开启!...
- 红亚科技联手董付国老师开启Python实训教育新篇章
- 一个前端博客(9)——浏览器检测和加载
- php mac安装grpc扩展,Mac使用pecl安装grpc报错:Warning:mkdir():File exists in System.php
- Activiti7入门,Activiti7 数据库表结构详细解析
- ACM解题总结——HihoCoder1200 (微软笔试题)
- 移动硬盘安装manjaro 20.2以及常用软件安装
- matlab 菱形符号,matlab 图形符号
- python获取12306火车票_Python脚本实现12306火车票查询系统
- 马化腾和朱啸虎互怼之后,摩拜ofo合并可能性基本为零
- 「π」里藏着所有人的银行卡密码和生日?
- D. Rescue Nibel(cf) 区间覆盖 + 组合数学
- 什么是网关,网关的作用是什么
- 操作系统-存储器管理实验
- css 画小黄人,纯CSS3画出小黄人并实现动画效果
- 服务器显示post是什么意思,post请求 post请求是什么
- VMware虚拟机安装macos Big Sur 11.2.2 (20D80)镜像CDR/ISO下载
热门文章
- 二叉树的查找 Java
- 计算机显卡发展史,NVIDIAPCIE计算机显卡发展史.doc
- 北大、清华教授在线分享,机器人视觉、城市智能管理等主题报告,邀您“在线+免费”观看...
- 兰州大学计算机专业复试流程,兰大计算机复试相关事宜
- 一天4个个人记录,哇嘎嘎
- 互联网商业模式的创新
- Springcloud----SkyWalking链路追踪
- 如何恰当使用计算机辅助教学,计算机辅助教学
- 已知W1∩W2的一组基,将它扩充为W1+W2的一组基
- 2021年前端面试题(附带答案)