2014-01-09 32 views
0

我已經創建表的查詢:如何在postgreSQL中創建表時指定時間戳的格式?

CREATE TABLE Z (
A varchar(30), 
B varchar(30), 
C timestamp, 
D numeric, 
E varchar(30), 
F varchar(30), 
G varchar(30), 
H numeric 
); 

現在,我有一個分隔符CSV文件「|」並在此文件中的條目像

1313131|131313131|20130103115041|20.0000000|ABCD|EFGH||0.0000000 

我想下面的命令導入表中的數據:

\copy Z from filename WITH (FORMAT CSV , DELIMITER '|', NULL ''); 

但我得到以下錯誤:

ERROR: invalid input syntax for type timestamp: "20130103115041" 
CONTEXT: COPY Z, line 1, column C: "20130103115041" 

我猜我必須在創建表格時指定時間戳記格式,以便它可以接受「YYYYMMDDHHMMSS」格式的輸入。

任何想法?

在此先感謝。

回答

2

你可以把這樣的時間戳和:

SELECT to_timestamp('20130103115041','YYYYMMDDHHMISS'); 

然而,COPY不提供輸入濾波器。所以你可能想要CREATE UNLOGGED TABLE ...來存儲COPY數據,然後做一個INSERT INTO ... SELECT ...來插入和轉換數據。

+0

而且,從'timestamp timestamp'到'timestamp'的任何隱式或顯式轉換都會將session的當前時區從'timestampz'中刪除而不會丟棄任何東西,對吧?多年來,時區和DST引發了許多延長的發誓會議,所以我總是對他們偏執。 –

+0

@ muistooshort如果有疑問,請先SET'TimeZone ='UTC''。同樣,大量的髒話。我總是不得不看看規則,因爲我無法記住我的頭頂,所以很不確定。 –