2015-04-12 58 views
0

我想對下表執行插入操作,但我無法將日期轉換爲ARRAY。如何在Postgres中對日期進行排列

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' id, '20', 'FALSE' 
FROM unnest(ARRAY[3,4,5]) x, unnest(ARRAY[ 2015-4-12, 2015-4-19, 2015-4-26]) y 

我得到以下錯誤:

ERROR: Column 'date' is of type date But the expression is of type integer

+0

什麼是您的Postgres版本?什麼是''20:00:00'ID'應該這樣做?你真的想要一個笛卡兒積(3 x 3 = 9行),還是你真的想要兩個數組並行取得3行? –

回答

3

一種array literal比更簡單:

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

如果你足夠幸運運行當前版本的Postgres 9.4(或更高版本),還有就是UNNEST兩列平行的新的安全方式:

INSERT INTO schedule(idzone, "date", "time", duration, automatic) 
SELECT x, y, '20:00:00' id, 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行的笛卡爾乘積。那麼你的原始形式是正確的。

另外:很好的做法從來沒有使用保留字或基本類型名稱,如「日期」和「時間」作爲標識符。

1

隨着錯誤消息告訴,2015-4-12不是約會。這是數字2015減去數字4減去數字12

您可能寫一個單獨的日期爲:

'2014-04-12'::date 

date '2015-4-12' 

用於陣列(避免個別管型)更短的形式是:

ARRAY['2015-4-12', '2015-4-19']::date[] 
+0

我剛剛測試過,解決方案ARRAY ['2015-4-12','2015-4-19'] :: date []工作完美! Thnaks! –

相關問題