生活随笔
收集整理的這篇文章主要介紹了
PostgreSQL的generate_series函数应用例子
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
Pg中有一個很有用處的內(nèi)置函數(shù)generate_series,可以按不同的規(guī)則用來產(chǎn)生一系列的填充數(shù)據(jù)。
一、語法
generate_series(start,stop) --int or bigint
generate_series(start,stop,step) --int or bigint
generate_series(start,stop, step interval) --timestamp or timestamp with time zone
二、應(yīng)用例子 1.int類型,不寫步長時默認是1
postgres=# select generate_series(1,10);generate_series
-----------------12345678910
(10 rows)postgres=# select generate_series(1,10,3);generate_series
-----------------14710
(4 rows)postgres=# select generate_series(5,1);generate_series
-----------------
(0 rows)postgres=# select generate_series(5,1,-1);generate_series
-----------------54321
(5 rows) 2.時間類型
postgres=# select generate_series(now(),now() + '7 day','1 day');generate_series
-------------------------------2012-08-27 22:12:40.915368+082012-08-28 22:12:40.915368+082012-08-29 22:12:40.915368+082012-08-30 22:12:40.915368+082012-08-31 22:12:40.915368+082012-09-01 22:12:40.915368+082012-09-02 22:12:40.915368+082012-09-03 22:12:40.915368+08
(8 rows)postgres=# select generate_series(to_date('20120827','yyyymmdd'),to_date('20120828','yyyymmdd'),'3 h');generate_series
------------------------2012-08-27 00:00:00+082012-08-27 03:00:00+082012-08-27 06:00:00+082012-08-27 09:00:00+082012-08-27 12:00:00+082012-08-27 15:00:00+082012-08-27 18:00:00+082012-08-27 21:00:00+082012-08-28 00:00:00+08
(9 rows)3.IP類型
postgres=# create table t_kenyon(id int,ip_start inet,ip_end inet);
CREATE TABLE
postgres=# insert into t_kenyon values(1,'192.168.1.254','192.168.2.5');
INSERT 0 1
postgres=# insert into t_kenyon values(2,'192.168.2.254','192.168.3.5');
INSERT 0 1
postgres=# insert into t_kenyon values(3,'192.168.3.254','192.168.4.5');
INSERT 0 1postgres=# select * from t_kenyon;id | ip_start | ip_end
----+---------------+-------------1 | 192.168.1.254 | 192.168.2.52 | 192.168.2.254 | 192.168.3.53 | 192.168.3.254 | 192.168.4.5
(3 rows)postgres=# select id,generate_series(0,ip_end-ip_start)+ip_start as ip_new from t_kenyon;id | ip_new
----+---------------1 | 192.168.1.2541 | 192.168.1.2551 | 192.168.2.01 | 192.168.2.11 | 192.168.2.21 | 192.168.2.31 | 192.168.2.41 | 192.168.2.52 | 192.168.2.2542 | 192.168.2.2552 | 192.168.3.02 | 192.168.3.12 | 192.168.3.22 | 192.168.3.32 | 192.168.3.42 | 192.168.3.53 | 192.168.3.2543 | 192.168.3.2553 | 192.168.4.03 | 192.168.4.13 | 192.168.4.23 | 192.168.4.33 | 192.168.4.43 | 192.168.4.5
(24 rows)
三、總結(jié)
Pg的generate_series函數(shù)對生成測試數(shù)據(jù),批量更新一定規(guī)則的數(shù)據(jù)有比較多的應(yīng)用場景,使用得當可提升開發(fā)效率。另外IP的序列生成也是PG的一個亮點。
有兩種情況不能生成數(shù)據(jù):
1.步長為正,且開始值比結(jié)束值大
2.步長為負,且開始值比結(jié)束值小
四、參考: http://www.postgresql.org/docs/9.0/static/functions-srf.html http://blog.163.com/digoal@126/blog/static/163877040201111805555263/
轉(zhuǎn)載于:https://my.oschina.net/Kenyon/blog/75099
總結(jié)
以上是生活随笔為你收集整理的PostgreSQL的generate_series函数应用例子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。