婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > postgres array_to_string和array的用法講解

postgres array_to_string和array的用法講解

熱門標簽:移動外呼系統模擬題 電話機器人怎么換人工座席 400電話申請客服 濟南外呼網絡電話線路 廣州電銷機器人公司招聘 地圖標注要花多少錢 江蘇400電話辦理官方 電銷機器人能補救房產中介嗎 天津開發區地圖標注app

有三張表,分別如下:

select * from vehicle

select * from station

select * from vehicle_station

需求:

vehicle和station表示多對多的關系,需要把vehicle表對應的station表的第二字段查出來放到一個字段,如果對應多條,用逗號隔開放到一個字段。

解決方案:

SELECT v.*, array_to_string(ARRAY (SELECT station_name FROM station WHERE ID IN (SELECT station_id FROM vehicle_station WHERE vehicle_id = v. ID)),',') station_names FROM vehicle v

結果如下:

補充:Postgres array 數組類型詳細使用

德哥這篇文章寫的很不錯,在相關函數部分,尤其是 array_upper,array_lower 部分,有我自己的一些解釋。

ARRAY類型包含幾個重要的特征

維度

也就是幾維數組, 不管怎么賦值, ARRAY最終必須是個矩陣.

例1 :

ARRAY[1,2,3,4] 是一維數組,

ARRAY[[1,2],[3,4],[5,6]] 是二維數組

例2 :

ARRAY[['digoal','zhou'],['a','b',c']] 是錯誤的. 因為第二個維度中的第一個array有2個元素, 而第二個array有3個元素. 不是一個矩陣. 個數必須一致.

同時類型也必須一致

例3 :

ARRAY[['digoal','zhou'],[1,2]] 是錯誤的. 因為['digoal','zhou']是text[]類型, 而[1,2]是int[]類型.

元素

一維數組ARRAY[1,2,3,4] 中的4個元素分別是 1, 2, 3, 4. 這些int型的值.

二維數組ARRAY[[1,2],[3,4],[5,6]] 中的第一維度有3個元素是 ARRAY[1,2] , ARRAY[3,4] , ARRAY[5,6] 這些int[]類型的值. 第二個維度的第一個subscript的元素有兩個, 分別是1,2 . 第二個subscript 分別是3,4. 第三個subscript分別是5,6.

元素之間的分隔符, 除了box類型是分號;, 其他類型的分隔符都是逗號,.

擴展性

一維數組可以擴展, 二維數組無法擴展.

subscript

訪問ARRAY中的元素需要提供subscript值. 默認是從1開始編號. 除非賦值的時候強制指定subscript

例1 :

ARRAY[[1,2],[3,4],[5,6]] as a
a[1][1] = 1;
a[1][2] = 2;
a[2][1] = 3;
a[2][2] = 4;
a[3][1] = 5;
a[3][2] = 6;

a第一個[]表示第一維度, 里面的數字代表第一維度中要訪問的subscript,

a第二個[]表示第二維度, 里面的數字代表第二維度中要訪問的subscript,

另外也可以訪問ARRAY的slice.

例2 :

a[1:2][1:1] = {{1},{3}}

第一個[]中的1表示低位subscript, 2表示高位subscript值.

第二個[]中左邊的1表示低位subscript, 右邊的1表示高位subscript值.

a[2:3][1:2] = {{3,4},{5,6}}

分片的另一種寫法, 只要其中的一個維度用了分片寫法, 其他的維度如果沒有使用分片寫法, 默認視為高位

如a[2:3][2] 等同于 a[2:3][1:2]

接下來講解一下ARRAY類型的幾個常用函數 :

array_dims, 返回的是各個維度中的低位subscript和高位subscript, 如下 :

digoal=> select array_dims(ARRAY[[1,2,3,4,5],[6,7,8,9,10]]);
 array_dims 
---------+--
 [1:2][1:5]

array_length, 返回的是array中指定維度的長度或元素個數, 如下 :

digoal=> select array_length(ARRAY[[1,2,3,4,5],[6,7,8,9,10]], 1);
 array_length 
-------+------
      2
digoal=> select array_length(ARRAY[[1,2,3,4,5],[6,7,8,9,10]], 2);
 array_length 
--------+-----
      5

注意:array_lower 和 array_upper 返回值都是下標 ,默認從1開始的下標。

array_lower, 返回的是ARRAY中指定維度的低位subscript值, 如下 :

digoal=> select array_lower(ARRAY[[1,2,3,4,5],[6,7,8,9,10]], 2);
 array_lower 
--------+----
      1

下面就是強制指定subscript值了,

digoal=> select array_lower('[-3:-2]={1,2}'::int[], 1);
 array_lower 
---------+----
     -3

array_upper, 返回的是ARRAY中指定維度的高位subscript值, 如下 :

digoal=> select array_upper(ARRAY[[1,2,3,4,5],[6,7,8,9,10]], 2);
 array_upper 
--------+----
      5

下面就是強制指定subscript值了,

digoal=> select array_upper('[-3:-2]={1,2}'::int[], 1);
 array_upper 
--------+----
     -2

array_prepend, 用于在一維數組的前面插入元素, 如下

digoal=> select array_prepend('digoal', ARRAY['francs','david']);
   array_prepend   
-------------------+---
 {digoal,francs,david}
array_append, 用于在一維數組的后面插入元素, 如下
digoal=> select array_append(ARRAY['francs','david'], 'digoal');
   array_append   
---------------+-------
 {francs,david,digoal}

array_cat, 用于兩個相同維度的數組的連接, 或者一個n維數組和一個n+1維數組的連接, 如下

digoal=> select array_cat(ARRAY['francs'], ARRAY['digoal','david']);
    array_cat    
----------------+------
 {francs,digoal,david}
digoal=> select array_cat(ARRAY['francs'], ARRAY[['digoal']]);
   array_cat   
-----------------+---
 {{francs},{digoal}}

generate_subscripts, 用于按順序返回ARRAY的指定維度的subscript(s)值, 如下 :

正向返回第一維度的subscript值.

digoal=> select generate_subscripts(a, 1) from (select ARRAY['a','b','c','d'] as a) t;
 generate_subscripts 
---------------+-----
          1
          2
          3
          4

反向返回第一維度的subscript值.

digoal=> select generate_subscripts(a, 1, true) from (select ARRAY['a','b','c','d'] as a) t;
 generate_subscripts 
-----------------+--
          4
          3
          2
          1
digoal=> select generate_subscripts(a, 1) from (select '[-5:-1]={1,2,3,4,5}'::int[] as a) t;
 generate_subscripts 
---------------+-----
         -5
         -4
         -3
         -2
         -1
digoal=> select generate_subscripts(a, 1, true) from (select '[-5:-1]={1,2,3,4,5}'::int[] as a) t;
 generate_subscripts 
---------------+-----
         -1
         -2
         -3
         -4
         -5

多維數組的第二維度,

digoal=> select generate_subscripts(a, 2) from (select '[-5:-4][2:4]={{1,2,3},{4,5,6}}'::int[] as a) t;
 generate_subscripts 
---------------+-----
          2
          3
          4

接下來講解一下ARRAY類型的操作符

digoal=> select typname,oid from pg_type where typname='anyarray';
 typname | oid 
----------+------
 anyarray | 2277

操作符如下 :

digoal=> select oprname,oprleft,oprright,oprresult,oprcode,oprrest,oprjoin from pg_operator where oprleft=2277 or oprright=2277;
 oprname | oprleft | oprright | oprresult |  oprcode   |  oprrest  |   oprjoin   
---------+---------+----------+-----------+----------------+-------------+-----------------
 ||   |  2277 |   2283 |   2277 | array_append  | -      | -
 ||   |  2283 |   2277 |   2277 | array_prepend | -      | -
 ||   |  2277 |   2277 |   2277 | array_cat   | -      | -
 =    |  2277 |   2277 |    16 | array_eq    | eqsel    | eqjoinsel
 >   |  2277 |   2277 |    16 | array_ne    | neqsel   | neqjoinsel
     |  2277 |   2277 |    16 | array_lt    | scalarltsel | scalarltjoinsel
 >    |  2277 |   2277 |    16 | array_gt    | scalargtsel | scalargtjoinsel
 =   |  2277 |   2277 |    16 | array_le    | scalarltsel | scalarltjoinsel
 >=   |  2277 |   2277 |    16 | array_ge    | scalargtsel | scalargtjoinsel
    |  2277 |   2277 |    16 | arrayoverlap  | areasel   | areajoinsel
 @>   |  2277 |   2277 |    16 | arraycontains | contsel   | contjoinsel
 @   |  2277 |   2277 |    16 | arraycontained | contsel   | contjoinsel
(12 rows)

【注意】

- PostgreSQL中對ARRAY類型的維度沒有限制, 如int[]并不代表只能存儲一維數組, 其實可以存儲任意維度的ARRAY值.

- PostgreSQL中對ARRAY類型中元素的個數也沒有限制, 如int[10] , 不代表只能存儲10個元素.可以超出.

例如 :

digoal=> create table array_test (id int[2]);
CREATE TABLE
digoal=> insert into array_test values (ARRAY[[1,2,3,4,5],[6,7,8,9,10]]);
INSERT 0 1

這個例子中元素的個數和維度都超出了int[2]的限制,但是并沒有報錯,而且數據已經存儲進去了.

digoal=> select * from array_test ;
       id       
---------------------+------
 {{1,2,3,4,5},{6,7,8,9,10}}

手冊上的解釋如下 :

However, the current implementation ignores any supplied array size limits, i.e., the behavior is the same as for arrays of unspecified length.

The current implementation does not enforce the declared number of dimensions either. Arrays of a particular element type are all considered to be of the same type, regardless of size or number of dimensions. So, declaring the array size or number of dimensions in CREATE TABLE is simply documentation; it does not affect run-time behavior.

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • 解決PostgreSQL Array使用中的一些小問題
  • 對Postgresql中的json和array使用介紹
  • postgresql數據庫使用說明_實現時間范圍查詢
  • postgresql 實現將數組變為行
  • PostgreSQL 對數組的遍歷操作

標簽:昭通 辛集 溫州 寶雞 杭州 榆林 海西 濮陽

巨人網絡通訊聲明:本文標題《postgres array_to_string和array的用法講解》,本文關鍵詞  postgres,array,string,和,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《postgres array_to_string和array的用法講解》相關的同類信息!
  • 本頁收集關于postgres array_to_string和array的用法講解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    精品欧美乱码久久久久久| 久久精品一区二区三区四区| 精品噜噜噜噜久久久久久久久试看| 国产欧美一区在线| 免费成人av在线播放| 色琪琪一区二区三区亚洲区| 久久综合色8888| 天堂av在线一区| 色哟哟国产精品| 亚洲欧美综合色| 国产成人在线网站| 精品国产一区二区三区四区四| 亚洲视频免费在线| 成人免费视频一区| 久久精品人人爽人人爽| 精品午夜久久福利影院 | 国产黑丝在线一区二区三区| 5858s免费视频成人| 亚洲综合精品久久| 91香蕉视频mp4| 国产精品婷婷午夜在线观看| 国产在线播放一区| 精品国产乱码久久久久久1区2区| 免费视频一区二区| 欧美一区二区三区在线看| 日本成人在线不卡视频| 欧美一三区三区四区免费在线看| 亚洲成年人影院| 欧美精品久久久久久久久老牛影院| 亚洲午夜电影在线| 欧美日韩激情在线| 日日摸夜夜添夜夜添亚洲女人| 欧美三级中文字| 三级影片在线观看欧美日韩一区二区 | 成人一区二区三区视频在线观看| 久久视频一区二区| 成人丝袜视频网| 国产精品第四页| 在线免费一区三区| 日韩高清一区在线| 久久这里只精品最新地址| 国产白丝精品91爽爽久久| 国产精品国产精品国产专区不蜜| 99精品欧美一区二区三区综合在线| 亚洲三级视频在线观看| 欧美日韩极品在线观看一区| 美洲天堂一区二卡三卡四卡视频| 欧美电影免费观看高清完整版| 国产又粗又猛又爽又黄91精品| 国产欧美日本一区二区三区| 一本色道久久综合精品竹菊| 亚洲一区二区三区国产| 日韩视频免费观看高清在线视频| 国产一区二区三区电影在线观看| 中文字幕一区二区三区四区| 欧美日韩中文一区| 国产一区美女在线| 一个色在线综合| 久久午夜老司机| 欧美性高清videossexo| 九九九精品视频| 樱花草国产18久久久久| 精品蜜桃在线看| 欧美中文字幕一区二区三区亚洲| 免费看日韩a级影片| 亚洲欧美在线视频| 欧美一区二区久久| 91在线观看下载| 久久成人久久爱| 亚洲免费观看高清完整| 26uuu精品一区二区在线观看| 91免费看`日韩一区二区| 日韩av不卡一区二区| 亚洲欧洲一区二区三区| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 久久精品国产一区二区| 亚洲青青青在线视频| 欧美成人女星排行榜| 欧美日韩在线直播| 成人免费视频caoporn| 久久99国产精品免费网站| 一区二区三区小说| 国产精品美女一区二区三区 | 亚洲综合久久av| 国产日产欧美一区二区视频| 日韩午夜激情电影| 欧美色偷偷大香| www.亚洲免费av| 粉嫩蜜臀av国产精品网站| 看电视剧不卡顿的网站| 五月激情丁香一区二区三区| 亚洲色图清纯唯美| 国产欧美日韩另类一区| 亚洲精品一区二区三区影院 | 亚洲精品大片www| 国产欧美一区二区精品性色| 欧美变态口味重另类| 欧美一区二区在线免费播放| 欧美视频一二三区| 91成人免费电影| 91福利精品视频| 欧美日韩亚洲综合在线 | 国产91富婆露脸刺激对白| 毛片av一区二区| 蜜桃久久久久久| 视频一区欧美精品| 轻轻草成人在线| 免费高清在线一区| 青青青伊人色综合久久| 麻豆精品一二三| 国产一区在线观看麻豆| 国产麻豆精品在线观看| 国产在线精品一区二区三区不卡| 免费日本视频一区| 极品少妇xxxx精品少妇偷拍| 国产一区二区三区免费看| 国产一区二区成人久久免费影院| 国产福利精品导航| 不卡影院免费观看| 欧美中文字幕不卡| 欧美一区二区在线免费观看| 久久亚洲影视婷婷| 国产精品久久久久久久久免费樱桃 | 欧美一区二区三区白人| 欧美不卡激情三级在线观看| 久久久久久久综合色一本| 亚洲国产精品v| 亚洲宅男天堂在线观看无病毒| 亚洲福利视频一区二区| 免费成人结看片| 国产成人免费在线观看不卡| 色婷婷久久综合| 8v天堂国产在线一区二区| 欧美不卡视频一区| 成人欧美一区二区三区黑人麻豆 | 国产成人一级电影| 色呦呦国产精品| 日韩丝袜美女视频| 亚洲视频一区二区在线| 日韩在线一二三区| 成人v精品蜜桃久久一区| 精品视频一区三区九区| 久久嫩草精品久久久精品一| 亚洲色图制服诱惑| 久久se这里有精品| 日本韩国一区二区三区视频| 日韩欧美在线123| 亚洲免费在线看| 精一区二区三区| 欧美三级电影网站| 国产精品视频一区二区三区不卡| 五月婷婷久久综合| 99精品在线免费| 日韩欧美国产麻豆| 亚洲柠檬福利资源导航| 韩国精品一区二区| 欧美挠脚心视频网站| 亚洲婷婷综合色高清在线| 久久99日本精品| 欧美性极品少妇| 中文字幕一区在线观看| 久草在线在线精品观看| 欧美精品久久一区二区三区| 中文字幕亚洲成人| 国产成人一级电影| 欧美大片国产精品| 性久久久久久久久| 91香蕉国产在线观看软件| 欧美激情在线一区二区三区| 久热成人在线视频| 911精品产国品一二三产区| 亚洲精品水蜜桃| 成人手机在线视频| 久久久久国产精品麻豆ai换脸| 天天影视色香欲综合网老头| 色哟哟亚洲精品| 亚洲天堂精品视频| 成人午夜私人影院| 国产亚洲精品bt天堂精选| 久久精工是国产品牌吗| 欧美伦理电影网| 亚洲成人激情社区| 欧洲一区在线观看| 一区二区三区国产精品| 91小视频在线| 亚洲美女精品一区| 色综合天天综合给合国产| 日韩一区在线看| 91免费精品国自产拍在线不卡 | 久久亚洲欧美国产精品乐播| 免费精品视频在线| 欧美一区二区免费| 韩国女主播成人在线| 久久综合九色欧美综合狠狠| 国产综合久久久久久久久久久久| 精品国产乱码久久久久久夜甘婷婷| 精品亚洲aⅴ乱码一区二区三区| 欧美精品一区二区久久婷婷| 韩国v欧美v日本v亚洲v| 国产三级三级三级精品8ⅰ区|