2014-04-02 37 views
0

使用PostgreSQL 9.1表,我想從timestamp列中更新日期列。使用EXTRACT函數更新postgreSQL列(用作表達式的子查詢返回多個行)

 
table: 

id|name|timesatmp 
----------------- 

我創建了一個天列然後試圖解壓後的日數:

SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); 
Result: 16 

http://www.postgresql.org/docs/current/static/functions-datetime.html

,當我試圖使用表格來更新:

UPDATE table SET day = 
(SELECT EXTRACT (DAY FROM "timestamp") FROM table); 

我此錯誤:

More than one row returned by a subquery used as an expression 

我發現我可以通過將LIMIT 1添加到子查詢中來修復我的聲明,以確保至多返回1行。但仍不確定是否是正確的做法。

回答

0

我沒有看到這個子選擇,只需更新列的需要:

UPDATE table SET day = EXTRACT (DAY FROM "timestamp"); 

真正的問題是,雖然:爲什麼你要存儲可以從現有數據中獲得信息(在這種情況下:沒有任何額外的成本)


順便說一句:timestamp是可怕的命名爲一列。首先因爲它也是一個數據類型的名稱,因此真的是混淆。其次(更重要的是我認爲)它根本不記錄該列包含的內容。 「開始日期」?一個「結束日期」? 「到期日」是「有效日期」? ...

+0

謝謝!事情是,我需要創建一個單獨的列,以便將其用作我的羣集數據庫中的分區鍵。感謝您對列名的建議! – Shadin

+1

@Oxi:如果你想把它作爲分區鍵,你可能應該在觸發器中做到這一點。 –

+0

你能解釋一下你的意思嗎?我有2個節點。當我插入數據時,我希望它在一天之間分開(在節點1中插入日1,3,5,7 ...等等,在節點2中插入日2,4,6 ...)讓我們說我讓僅在節點1上觸發插入(第1,3,5 ...天)等節點插入節點的其他日子在哪裏? – Shadin

相關問題