1

次のテーブルに挿入したいのですが、日付の ARRAY を変換できません。

CREATE TABLE schedule (
  idschedule serial NOT NULL,
  idzone integer NOT NULL,
  "time" timestamp without time zone NOT NULL,
  automatic boolean NOT NULL,
  idrecurrence character varying(20),
  duration integer,
  date date,
)

INSERT私が実行しようとしている:

INSERT INTO schedule(idzone, "date", "time", duration, automatic) 
SELECT x, y, '20:00:00', '20', 'FALSE' 
FROM   unnest(ARRAY[3,4,5]) x
     , unnest(ARRAY[2015-4-12, 2015-4-19, 2015-4-26]) y

次のエラーが表示されます。

エラー: 列 'date' は日付型ですが、式は整数型です

4

2 に答える 2

6

配列リテラルは、配列コンストラクターよりもさらに単純です。

'{2015-4-12, 2015-4-19}'::date[]

Postgres 9.4 以降では、2 つの配列を並行してネスト解除する安全な方法があります。

INSERT INTO schedule
      (idzone, "date", "time"    , duration, automatic) 
SELECT x     , y     , '20:00:00', 20      , false
FROM   unnest('{3, 4, 5}'::int[]
            , '{2015-4-12, 2015-4-19, 2015-4-26}'::date[]
             ) AS t (x, y)  -- produces 3 rows

見る:

wantedある配列の各要素を他の各要素に交差結合して、9 行のデカルト積を生成しない限り。そうすれば、あなたの元の形は正しいです。

余談ですが、予約語や「date」や「​​time」などの基本型名を識別子として使用しないことをお勧めします。

于 2015-04-12T20:58:18.843 に答える