GBase 8c
其他
文章

GBase 8c 数据类型——13-数组

发表于2023-12-12 10:16:4515次浏览0个评论

GBase 8c允许定义变长多维数组,例如:

CREATE TABLE sal_emp (    name            text,    pay_by_quarter  integer[],    schedule        text[][] ); CREATE TABLE

数组数据类型通过在数据类型后面加上方括号([])来命名。
上述例子中创建一个名为sal_emp的表,它的列分别为:

  • 类型为text的列name;

  • 一维integer类型数据pay_by_quarter;

  • 二维text类型数组schedule。

同时,CREATE TABLE的语法也允许指定数组的确切大小,例如:

CREATE TABLE tictactoe (    squares   integer[3][3] ); CREATE TABLE

但是这种指定并不限制数组的大小和长度,并不影响后续运行时的行为。
或者写成:

pay_by_quarter  integer ARRAY[4],

或者:

pay_by_quarter  integer ARRAY,

数组的输入,一般将元素值用花括号包围并用逗号分隔。例如:

INSERT INTO sal_emp    VALUES ('Bill',    '{10000, 10000, 10000, 10000}',    '{{"meeting", "lunch"}, {"training", "presentation"}}'); INSERT 0 1 INSERT INTO sal_emp    VALUES ('Carol',    ARRAY[20000, 25000, 25000, 25000],    ARRAY[['breakfast', 'consulting'], ['meeting', 'lunch']]); INSERT 0 1

数组的查询操作与表查询类似。例如:

SELECT * FROM sal_emp; name  |      pay_by_quarter       |                 schedule -------+---------------------------+------------------------------------------- Bill  | {10000,10000,10000,10000} | {{meeting,lunch},{training,presentation}} Carol | {20000,25000,25000,25000} | {{breakfast,consulting},{meeting,lunch}} (2 rows)

对所有员工第三季度工资查询:

SELECT pay_by_quarter[3] FROM sal_emp; pay_by_quarter ----------------          10000          25000 (2 rows)

数组的修改,可以使用UPDATE语句。例如:

UPDATE sal_emp SET pay_by_quarter = '{25000,25000,27000,27000}'    WHERE name = 'Carol'; UPDATE 1

登录后复制

数组的搜索:

SELECT * FROM sal_emp WHERE 10000 = ALL (pay_by_quarter); name |      pay_by_quarter       |                 schedule ------+---------------------------+------------------------------------------- Bill | {10000,10000,10000,10000} | {{meeting,lunch},{training,presentation}} (1 row)

评论

登录后才可以发表评论