PostgreSQL:陣列——型別、運算子和函式

Ryan_Bai發表於2020-12-01

PostgreSQL 的機會定義為可變長度的多維陣列的列一個表。任何內建或使用者定義的基本型別陣列,列舉型別,或者可以建立複合型。

操作

宣告

陣列型別可以宣告為:

CREATE TABLE monthly_savings (
    name text,
    saving_per_quarter integer[],
    scheme text[][]
 );

或透過使用關鍵字“ARRAY”:

CREATE TABLE monthly_savings (
    name text,
    saving_per_quarter integer ARRAY[4],
    scheme text[][]
 );

插入值

陣列的值可以插入一個文字常量,內附大括號內的元素值,並用逗號將它們隔開。例子如下:

INSERT INTO monthly_savings
VALUES ('Manisha',
 '{20000, 14600, 23500, 13250}',
 '{{"FD", "MF"}, {"FD", "Property"}}');

訪問

用於訪問陣列的一個例子如下所示。下面的命令將選擇人員,他們儲存在第二,第四個。

SELECT name
  FROM monhly_savings
 WHERE saving_per_quarter[2] > saving_per_quarter[4];

修改

修改陣列的一個例子如下所示。

UPDATE monthly_savings
   SET saving_per_quarter = '{25000,25000,27000,27000}'
 WHERE name = 'Manisha';

或陣列表示式語法:

UPDATE monthly_savings
   SET saving_per_quarter = ARRAY[25000,25000,27000,27000]
 WHERE name = 'Manisha';

尋找

搜尋陣列的一個例子如下所示。

SELECT * 
  FROM monthly_savings
 WHERE saving_per_quarter[1] = 10000
    OR saving_per_quarter[2] = 10000
    OR saving_per_quarter[3] = 10000
    OR saving_per_quarter[4] = 10000;

如果陣列的大小是已知的上述搜尋方法都可以使用。否則,下面的例子說明如何時要搜尋的大小是不知道的。

SELECT * 
  FROM monthly_savings
 WHERE 10000 = ANY (saving_per_quarter);

運算子

運算子 含義 示例
=/<> ARRAY[1,2,3] = ARRAY[1,2,3]
=/<> ARRAY[1,2] = ARRAY[1,2,3]
=/<> ARRAY[[1,2,3] = ARRAY[1,2,3]
=/<> ARRAY[[1,2],[3,4]] = ARRAY[[3,4],[1,2]]
=/<> ARRAY[1.1,2.2,3.3]::int[] = ARRAY[1,2,3]
</> ARRAY[1,1] < ARRAY[1,1,1]
</> ARRAY[1,2] < ARRAY[1,1,1]
</> ARRAY[1,2] < ARRAY[[1,2]]
</> ARRAY[1,3] < ARRAY[[1,2]]
</> ARRAY[1,2,3] < ARRAY[[1,2]]
</> ARRAY[1,2,3] < ARRAY[[1,2],[3,1]]
</> ARRAY[1,2,3] < ARRAY[[1,2],[2,1]]
<=/>= ARRAY[1,2] >= ARRAY[[1,2]]
@>/<@ 包含 ARRAY[1, 2, 3] @> ARRAY[1, 2]
@>/<@ 包含 ARRAY[[1, 2, 3]] @> ARRAY[[1, 2], [2, 3]]
&& 重疊 ARRAY[1, 2, 3] && ARRAY[3, 4]
&& 重疊 ARRAY[[1, 2], [3,  4]] && ARRAY[4, 5]
|| 連線 ARRAY[1, 2] || ARRAY[3, 4] = ARRAY[1,2,3,4]
|| 連線 ARRAY[1, 2] || ARRAY[[3, 4], [5, 6]] = [[1,2],[3,4],[5,6]]
|| 連線 1 || ARRAY[2, 3] = ARRAY[1, 2, 3]

函式

名稱 描述 示例 結果
array_cat 連線兩個陣列,返回新陣列 array_cat(ARRAY[1, 2], ARRAY[3, 4]) [1,2,3,4]
array_ndims 返回陣列的維度,返回值型別為 int array_ndims(ARRAY[1, 2, 3]) 1
array_length 返回陣列指定維度的長度,維度數是有由第二個引數指定的 array_length(ARRAY[1, 2, 4], 1) 3
array_lower 返回陣列的下標
array_upperer 返回陣列的上標
array_prepend 在陣列的開頭插入一個元素 array_prepend(7, ARRAY[8, 9]) [7,8,9]
array_remove 移除陣列中為指定值的元素,只支援一維陣列 array_remove(ARRAY[1, 2, 3], 2) [1,3]
array_replace 把陣列中等於指定值元素的值用另一個指定值替代 array_replace(ARRAY[1, 4, 3], 4, 2) [1,2,3]
array_to_string 使用指定的分隔符(第二個引數) 將陣列元素連線為字串 array_to_string(ARRAY[1,2,3], ',') '1,2,3'
string_to_array 用指定的分隔符分隔的字串轉成陣列 string_to_array('1,2,3', ',') [1,2,3]
unnest 把陣列變成多行返回
array_agg 聚合函式

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31490526/viewspace-2738436/,如需轉載,請註明出處,否則將追究法律責任。

相關文章