2014-01-09 31 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''。同样,大量的脏话。我总是不得不看看规则,因为我无法记住我的头顶,所以很不确定。 –