2017-04-08 14 views
3

PostgreSQL 9.5.4。PostgreSQLの配列にgenerate_seriesの結果を追加するには?

私は、文字列形式で2つの日付の間の日の配列を返す関数を持っています。 それは、このコードに基づいています:

select (generate_series('2012-06-29', '2012-07-03', '1 day'::interval))::date 

このコードは、出力に5日を与え、それは大丈夫です。

しかし、私は機能でこれを行う場合:

DECLARE 
dates date[]; 

BEGIN 
select (generate_series('2012-06-29', '2012-07-03', '1 day'::interval))::date into dates; 
return array_to_string(dates, ','); 
END; 

次に、このようなエラーがあります: 『{「。無効な列リテラル『2012-06-29』は、配列の値がで始まる必要があります』次元を指定してください」

これはどのように修正できますか?

答えて

6

あなたは、配列コンストラクタを使用することができます。

DECLARE 
    dates date[]; 
BEGIN 
    select array(select generate_series('2012-06-29', '2012-07-03', '1 day'::interval)::date) 
    into dates 
    return dates; 
END; 

そのコードが実際には関数であれば、あなたはSQL関数

create function get_dates() 
    returns date[] 
$$ 
    return select array(select generate_series(current_date - 6, current_date, interval '1' day)::date); 
$$ 
language sql; 
+0

うまく動作します!ありがとう – Log

1

2012」「無効な配列リテラルにそれを簡素化することができます-06-29 '配列の値は、「{」で始まるか、次元を指定する必要があります。 "

SELECTarrayrow setに変換することができrow set

ARRAY()関数を返します。 であり、その逆関数はUNNEST()である。

関連する問題