<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                隨筆-102? 文章-0? 評論-83? # [PostgreSQL的generate_series函數應用](http://www.cnblogs.com/mchina/archive/2013/04/03/2997722.html) **一、簡介** PostgreSQL 中有一個很有用處的內置函數generate_series,可以按不同的規則產生一系列的填充數據。 **二、語法** <table align="left" border="0"><tbody><tr><th width="230" align="left"><span style="font-size: 14px;">函數</span></th> <th width="100" align="left"><span style="font-size: 14px;">參數類型</span></th> <th align="left"><span style="font-size: 14px;">返回類型</span></th> <th align="left"><span style="font-size: 14px;">描述</span></th></tr><tr><td><span style="font-family: courier new,courier; font-size: 12px;">generate_series(start, stop) <br/></span></td> <td><span style="font-family: courier new,courier; font-size: 12px;">int 或 bigint <br/></span></td> <td><span style="font-family: courier new,courier; font-size: 12px;">setof int 或 setof bigint(與參數類型相同) <br/></span></td> <td><span style="font-family: courier new,courier; font-size: 12px;">生成一個數值序列,從start 到 stop,步進為一</span></td></tr><tr><td><span style="font-family: courier new,courier; font-size: 12px;">generate_series(start, stop, step) <br/></span></td> <td><span style="font-family: courier new,courier; font-size: 12px;">int 或 bigint<br/></span></td> <td><span style="font-family: courier new,courier; font-size: 12px;"><span style="font-family: courier new,courier; font-size: 12px;">setof int 或 setof bigint(與參數類型相同) </span></span></td> <td><span style="font-family: courier new,courier; font-size: 12px;"><span style="font-family: courier new,courier; font-size: 12px;">生成一個數值序列,從start 到 stop,步進為step</span></span></td></tr><tr><td><span style="font-family: courier new,courier; font-size: 12px;"><span style="font-family: courier new,courier; font-size: 12px;">generate_series(start, stop, step_interval)</span></span></td> <td><span style="font-family: courier new,courier; font-size: 12px;">timestamp or timestamp with time zone <br/></span></td> <td><span style="font-family: courier new,courier; font-size: 12px;"><span style="font-family: courier new,courier; font-size: 12px;">timestamp 或 timestamp with time zone(same as argument type)</span></span></td> <td><span style="font-family: courier new,courier; font-size: 12px;"><span style="font-family: courier new,courier; font-size: 12px;"><span style="font-family: courier new,courier; font-size: 12px;">生成一個數值序列,從start 到 stop,步進為step</span></span></span></td></tr></tbody></table> ? **三、實例 ** 3.1) int 類型 a. 不寫步進時默認為1 [![](https://box.kancloud.cn/2015-10-30_5632e1cc1b197.gif)]( "復制代碼") ~~~ david=# select generate_series(1, 10); generate_series ----------------- 1 2 3 4 5 6 7 8 9 10 (10 rows) david=# ~~~ [![](https://box.kancloud.cn/2015-10-30_5632e1cc2bc16.gif)]( "復制代碼") b. 設置步進 [![](https://box.kancloud.cn/2015-10-30_5632e1cc36da0.gif)]( "復制代碼") ~~~ david=# select generate_series(1, 10, 3); generate_series ----------------- 1 4 7 10 (4 rows) david=# ~~~ [![](https://box.kancloud.cn/2015-10-30_5632e1cc45288.gif)]( "復制代碼") 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 是負數 [![](https://box.kancloud.cn/2015-10-30_5632e1cc50f7b.gif)]( "復制代碼") ~~~ david=# select generate_series(5,1,-1); generate_series ----------------- 5 4 3 2 1 (5 rows) david=# ~~~ [![](https://box.kancloud.cn/2015-10-30_5632e1cc63e29.gif)]( "復制代碼") 3.2) 時間類型 [![](https://box.kancloud.cn/2015-10-30_5632e1cc725fb.gif)]( "復制代碼") ~~~ david=# select generate_series(now(), now() + '7 days', '1 day'); generate_series ------------------------------- 2013-04-03 14:22:26.391852+08 2013-04-04 14:22:26.391852+08 2013-04-05 14:22:26.391852+08 2013-04-06 14:22:26.391852+08 2013-04-07 14:22:26.391852+08 2013-04-08 14:22:26.391852+08 2013-04-09 14:22:26.391852+08 2013-04-10 14:22:26.391852+08 (8 rows) david=# ~~~ [![](https://box.kancloud.cn/2015-10-30_5632e1cc80527.gif)]( "復制代碼") [![](https://box.kancloud.cn/2015-10-30_5632e1cc8fe74.gif)]( "復制代碼") ~~~ david=# select generate_series(to_date('20130403','yyyymmdd'), to_date('20130404','yyyymmdd'), '3 hours'); generate_series ------------------------ 2013-04-03 00:00:00+08 2013-04-03 03:00:00+08 2013-04-03 06:00:00+08 2013-04-03 09:00:00+08 2013-04-03 12:00:00+08 2013-04-03 15:00:00+08 2013-04-03 18:00:00+08 2013-04-03 21:00:00+08 2013-04-04 00:00:00+08 (9 rows) david=# ~~~ [![](https://box.kancloud.cn/2015-10-30_5632e1cc9eb0b.gif)]( "復制代碼") 3.3) IP類型 a. 建表 ~~~ david=# create table tbl_david(id int, ip_start inet, ip_stop inet); CREATE TABLE david=# ~~~ b. 插入數據 [![](https://box.kancloud.cn/2015-10-30_5632e1ccad229.gif)]( "復制代碼") ~~~ 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=# ~~~ [![](https://box.kancloud.cn/2015-10-30_5632e1ccb99d8.gif)]( "復制代碼") c. 查看數據 [![](https://box.kancloud.cn/2015-10-30_5632e1ccc6f85.gif)]( "復制代碼") ~~~ david=# select * from tbl_david ; id | ip_start | ip_stop ----+---------------+--------------- 1 | 192.168.1.6 | 192.168.1.10 2 | 192.168.2.16 | 192.168.2.20 3 | 192.168.3.116 | 192.168.3.120 (3 rows) david=# ~~~ [![](https://box.kancloud.cn/2015-10-30_5632e1ccd5a0a.gif)]( "復制代碼") d. generate_series 生成序列 [![](https://box.kancloud.cn/2015-10-30_5632e1cce2830.gif)]( "復制代碼") ~~~ 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.6 1 | 192.168.1.7 1 | 192.168.1.8 1 | 192.168.1.9 1 | 192.168.1.10 2 | 192.168.2.16 2 | 192.168.2.17 2 | 192.168.2.18 2 | 192.168.2.19 2 | 192.168.2.20 3 | 192.168.3.116 3 | 192.168.3.117 3 | 192.168.3.118 3 | 192.168.3.119 3 | 192.168.3.120 (15 rows) david=# ~~~ [![](https://box.kancloud.cn/2015-10-30_5632e1ccee057.gif)]( "復制代碼") **四、總結** PostgreSQL的generate_series函數對生成測試數據,批量更新一定規則的數據有比較多的應用場景,使用得當可提升開發效率,另外IP的序列生成也是PG的一個亮點。 **五、參考** - PostgreSQL官方文檔:[http://www.postgresql.org/docs/9.2/static/functions-srf.html](http://www.postgresql.org/docs/9.2/static/functions-srf.html) - kenyon的個人頁面:[http://my.oschina.net/Kenyon/blog/75099](http://my.oschina.net/Kenyon/blog/75099) 分類: [Postgresql](http://www.cnblogs.com/mchina/category/381458.html) 標簽: [postgresql](http://www.cnblogs.com/mchina/tag/postgresql/), [序列](http://www.cnblogs.com/mchina/tag/%E5%BA%8F%E5%88%97/), [generate_series](http://www.cnblogs.com/mchina/tag/generate_series/), [函數](http://www.cnblogs.com/mchina/tag/%E5%87%BD%E6%95%B0/) 綠色通道: [好文要頂]()[關注我]()[收藏該文]()[與我聯系](http://space.cnblogs.com/msg/send/David_Tang)[![](https://box.kancloud.cn/2015-10-30_5632e1cd04e5c.png)]( "分享至新浪微博") [![](https://box.kancloud.cn/2015-10-30_5632e1cd12de9.jpg)](http://home.cnblogs.com/u/mchina/) [David_Tang](http://home.cnblogs.com/u/mchina/) [關注 - 1](http://home.cnblogs.com/u/mchina/followees) [粉絲 - 116](http://home.cnblogs.com/u/mchina/followers) [+加關注]() 1 0 (請您對文章做出評價) [? ](http://www.cnblogs.com/mchina/archive/2013/03/15/2956017.html) 上一篇:[Linux 配置雙機SSH信任](http://www.cnblogs.com/mchina/archive/2013/03/15/2956017.html "發布于2013-03-15 16:48") [? ](http://www.cnblogs.com/mchina/archive/2013/04/09/2973427.html) 下一篇:[PostgreSQL分區表(Table Partitioning)應用](http://www.cnblogs.com/mchina/archive/2013/04/09/2973427.html "發布于2013-04-09 11:14") posted @ 2013-04-03 14:50[David_Tang](http://www.cnblogs.com/mchina/) 閱讀(753) 評論(0) [編輯](http://www.cnblogs.com/mchina/admin/EditPosts.aspx?postid=2997722)[收藏](#) ![](https://box.kancloud.cn/2015-10-30_5632e1cd1f5fa.jpg) Copyright ?2013 David_Tang
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看