【发布时间】:2011-08-31 04:24:01
【问题描述】:
我在将表列 TYPE 从没有时区的时间转换为整数时遇到问题。 那可能吗? 其中整数将等于秒。
我正在使用 ALTER table exampleTable ALTER COLUMN time TYPE integer。
【问题讨论】:
我在将表列 TYPE 从没有时区的时间转换为整数时遇到问题。 那可能吗? 其中整数将等于秒。
我正在使用 ALTER table exampleTable ALTER COLUMN time TYPE integer。
【问题讨论】:
应该这样做:
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);
【讨论】:
跟进马的回答,你也可以在使用部分添加一个表达式,例如:
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
【讨论】: