web-dev-qa-db-ja.com

関数で日付配列を含む変数を宣言するPOSTGRES

日付配列を宣言しようとしています。

私はこれを試しました:

DECLARE
dateVal DATE[] := ['2018-01-01','2018-02-01'];

私は得ます:

ERROR:  syntax error at or near "["

どうすれば適切に宣言できますか?

2
user165242

ARRAYキーワードを使用できます。

create table tbl (dateval date[]);
insert into tbl values(array ['20180101','20180102'::date]);

またはコードのブロックで:

do $$
declare 
    dateval date[];
begin
    dateval := array ['20180101','20180102'::date];
end;
$$;

または、式を日付の配列としてキャストします。

do $$
declare 
    dateval date[];
begin
    dateval := '{2015-4-12, 2015-4-19}'::date[];
end;
$$;

db <> fiddle ここ

3
McNets

変数が宣言時にわかっている場合は、宣言時に割り当てます。それ以外の場合は、NULLで初期化されており、割り当てるには別のステートメントが必要です。コードとパフォーマンスの小さな無駄。

DO
$$
DECLARE
   dateval date[] := '{2015-4-12, 2015-4-19}';
BEGIN
   -- do something
END
$$;

どちらか anarray literalor anARRAYコンストラクタ

上記の文字列リテラルは、型が割り当てで暗黙的に定義されているため、明示的なキャストを必要としません。

関連:

2