POSTGRES 在函数中声明包含日期数组的变量

use*_*242 3 postgresql plpgsql array

我正在尝试声明一个日期数组。

我试过这个:

DECLARE
dateVal DATE[] := ['2018-01-01','2018-02-01'];
Run Code Online (Sandbox Code Playgroud)

我得到:

ERROR:  syntax error at or near "["
Run Code Online (Sandbox Code Playgroud)

我如何正确声明它?

McN*_*ets 7

您可以使用 ARRAY 关键字:

create table tbl (dateval date[]);
insert into tbl values(array ['20180101','20180102'::date]);
Run Code Online (Sandbox Code Playgroud)

或者在代码块中:

do $$
declare 
    dateval date[];
begin
    dateval := array ['20180101','20180102'::date];
end;
$$;
Run Code Online (Sandbox Code Playgroud)

或者将表达式转换为日期数组。

do $$
declare 
    dateval date[];
begin
    dateval := '{2015-4-12, 2015-4-19}'::date[];
end;
$$;
Run Code Online (Sandbox Code Playgroud)

db<>在这里摆弄


Erw*_*ter 5

如果变量在声明时已知,则在声明时对其进行赋值。否则它会用 NULL 初始化,并且您需要另一个语句来分配它。代码和性能的一点浪费。

DO
$$
DECLARE
   dateval date[] := '{2015-4-12, 2015-4-19}';
BEGIN
   -- do something
END
$$;
Run Code Online (Sandbox Code Playgroud)

您只需要数组文字 ARRAY构造函数的正确语法。

上面的字符串文字不需要显式转换,因为类型是在赋值中隐式定义的。

有关的: