PostgreSQL的generate_series函數應用例子

來源:互聯網
上載者:User

PostgreSQL中有一個很有用處的內建函數generate_series,可以按不同的規則用來產生一系列的填充資料。

一、文法

generate_series(start,stop)                --int or bigintgenerate_series(start,stop,step)           --int or bigintgenerate_series(start,stop, step interval) --timestamp or timestamp with time zone
二、應用例子
1.int類型,不寫步長時預設是1postgres=# select generate_series(1,10); generate_series -----------------               1               2               3               4               5               6               7               8               9              10(10 rows)postgres=# select generate_series(1,10,3); generate_series -----------------               1               4               7              10(4 rows)postgres=# select generate_series(5,1); generate_series -----------------(0 rows)postgres=# select generate_series(5,1,-1); generate_series -----------------               5               4               3               2               1(5 rows)  2.時間類型postgres=# select generate_series(now(),now() + '7 day','1 day');        generate_series        ------------------------------- 2012-08-27 22:12:40.915368+08 2012-08-28 22:12:40.915368+08 2012-08-29 22:12:40.915368+08 2012-08-30 22:12:40.915368+08 2012-08-31 22:12:40.915368+08 2012-09-01 22:12:40.915368+08 2012-09-02 22:12:40.915368+08 2012-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+08 2012-08-27 03:00:00+08 2012-08-27 06:00:00+08 2012-08-27 09:00:00+08 2012-08-27 12:00:00+08 2012-08-27 15:00:00+08 2012-08-27 18:00:00+08 2012-08-27 21:00:00+08 2012-08-28 00:00:00+08(9 rows) 3.IP類型postgres=# create table t_kenyon(id int,ip_start inet,ip_end inet);CREATE TABLEpostgres=# insert into t_kenyon values(1,'192.168.1.254','192.168.2.5');INSERT 0 1postgres=# insert into t_kenyon values(2,'192.168.2.254','192.168.3.5');INSERT 0 1postgres=# 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.5  1 | 192.168.2.254 | 192.168.3.5  1 | 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.254  1 | 192.168.1.255  1 | 192.168.2.0  1 | 192.168.2.1  1 | 192.168.2.2  1 | 192.168.2.3  1 | 192.168.2.4  1 | 192.168.2.5  2 | 192.168.2.254  2 | 192.168.2.255  2 | 192.168.3.0  2 | 192.168.3.1  2 | 192.168.3.2  2 | 192.168.3.3  2 | 192.168.3.4  2 | 192.168.3.5  3 | 192.168.3.254  3 | 192.168.3.255  3 | 192.168.4.0  3 | 192.168.4.1  3 | 192.168.4.2  3 | 192.168.4.3  3 | 192.168.4.4  3 | 192.168.4.5(24 rows)
三、總結
Pg的generate_series函數對產生測試資料,批次更新一定規則的資料有比較多的應用情境,使用得當可提升開發效率。另外IP的序列產生也是PG的一個亮點。
有兩種情況不能產生資料:
1.步長為正,且開始值比結束值大
2.步長為負,且開始值比結束值小

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.