Postgres将列从没有时区的时间改为int

时间:2011-05-23 13:46:25

标签: postgresql alter-table

我无法将表列TYPE从没有时区的时间转换为整数。 那可能吗? 其中整数将等于秒。

我正在使用ALTER表exampleTable ALTER COLUMN时间TYPE整数。

2 个答案:

答案 0 :(得分:6)

这应该这样做:

 ALTER TABLE your_table 
     ALTER COLUMN time TYPE integer USING 0;

ALTER COLUMN通常仅在您要保留该列中的数据时使用。在你的情况下,上述应该工作,但不会给你买任何东西。删除列然后添加类型为integer且默认值为0的新列将同样有效。

(顺便说一下:你不应该使用像time这样的保留字作为列名)

修改
如果您确实要转换现有数据,则可以使用:

 ALTER TABLE your_table 
     ALTER COLUMN time_column TYPE integer USING extract(epoch from time_column);

答案 1 :(得分:3)

跟进马的答案,您还可以在使用部分添加表达式,例如:

ALTER TABLE your_table 
ALTER COLUMN time TYPE integer USING (
  extract('hours' from time) * 3600 +
  extract('minutes' from time) * 60 +
  extract('seconds' from time)
);

http://www.postgresql.org/docs/current/static/sql-altertable.html