Home > Database > Mysql Tutorial > body text

postgresql 数组 (2)

WBOY
Release: 2016-06-07 15:25:38
Original
1182 people have browsed it

8.10.4. 修改数组 一个数组可以完全被代替: UPDATE sal_emp SET pay_by_quarter = '{25000,25000,27000,27000}' WHERE name = 'Carol'; 或者使用 ARRAY 表达式语法: UPDATE sal_emp SET pay_by_quarter = ARRAY[25000,25000,27000,27000] WHERE name = 'Ca

8.10.4. 修改数组

一个数组值可以完全被代替:

UPDATE sal_emp SET pay_by_quarter = '{25000,25000,27000,27000}'
    WHERE name = 'Carol';
Copy after login

或者使用 ARRAY 表达式语法:

UPDATE sal_emp SET pay_by_quarter = ARRAY[25000,25000,27000,27000]
    WHERE name = 'Carol';
Copy after login

或者只是更新某一个元素:

UPDATE sal_emp SET pay_by_quarter[4] = 15000
    WHERE name = 'Bill';
Copy after login

或者更新某个片断:

UPDATE sal_emp SET pay_by_quarter[1:2] = '{27000,27000}'
    WHERE name = 'Carol';
Copy after login

我们可以通过给一个和已存在的元素相邻元素赋值的方法, 或者是向已存在的数据相邻或重叠的区域赋值的方法来扩大一个数组。 比如,如果一个数组 myarray 当前有 4 个元素,那么如果我们给 myarray[5] 赋值后,它就有五个元素。目前,这样的扩大只允许多一维数组进行, 不能对多维数组进行操作。

数组片段赋值允许创建不使用一为基的下标的数组。 比如,我们可以给 array[-2:7] 赋值, 创建一个脚标值在 -2 和 7 之间的数组。

新的数组值也可以用连接操作符 || 构造。

SELECT ARRAY[1,2] || ARRAY[3,4];
 ?column?
-----------
 {1,2,3,4}
(1 row)

SELECT ARRAY[5,6] || ARRAY[[1,2],[3,4]];
      ?column?
---------------------
 {{5,6},{1,2},{3,4}}
(1 row)
Copy after login

连接操作符允许把一个元素压入一个一维数组的开头或者结尾。它还接受两个 N 维的数组,或者一个 N 维和一个 N+1 维的数组。

在向一个一维数组的开头压入一个元素后,结果是这样的一个数组: 它的低界下标等于右手边操作数的低界下标减一,如果向一个一维数组的结尾压入一个元素, 结果数组就是一个保持左手边操作数低界的数组。比如:

SELECT array_dims(1 || ARRAY[2,3]);
 array_dims
------------
 [0:2]
(1 row)

SELECT array_dims(ARRAY[1,2] || 3);
 array_dims
------------
 [1:3]
(1 row)
Copy after login

如果两个相同维数的数组连接在一起,结果保持左手边操作数的外层维数的低界下标。 结果是这样一个数组:它包含左手边操作数的每个元素,后面跟着右手边操作数的每个元素。比如:

SELECT array_dims(ARRAY[1,2] || ARRAY[3,4,5]);
 array_dims
------------
 [1:5]
(1 row)

SELECT array_dims(ARRAY[[1,2],[3,4]] || ARRAY[[5,6],[7,8],[9,0]]);
 array_dims
------------
 [1:5][1:2]
(1 row)
Copy after login

如果一个 N 维的数组压到一个 N+1 维数组的开头或者结尾, 结果和上面的数组元素的情况类似。每个 N 维的子数组实际上都是 N+1 维数组的外层维数。比如:

SELECT array_dims(ARRAY[1,2] || ARRAY[[3,4],[5,6]]);
 array_dims
------------
 [0:2][1:2]
(1 row)
Copy after login

数组也可以用函数 array_prepend, 和 array_append, 以及 array_cat 构造。头两个只支持一维数组, 而 array_cat 支持多维数组。 请注意使用上面讨论的连接操作符要比直接使用这些函数好。实际上, 这些函数主要用于实现连接操作符。不过,在用户定义的创建函数里直接使用他们可能有必要。一些例子:

SELECT array_prepend(1, ARRAY[2,3]);
 array_prepend
---------------
 {1,2,3}
(1 row)

SELECT array_append(ARRAY[1,2], 3);
 array_append
--------------
 {1,2,3}
(1 row)

SELECT array_cat(ARRAY[1,2], ARRAY[3,4]);
 array_cat
-----------
 {1,2,3,4}
(1 row)

SELECT array_cat(ARRAY[[1,2],[3,4]], ARRAY[5,6]);
      array_cat
---------------------
 {{1,2},{3,4},{5,6}}
(1 row)

SELECT array_cat(ARRAY[5,6], ARRAY[[1,2],[3,4]]);
      array_cat
---------------------
 {{5,6},{1,2},{3,4}}
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template