[英]postgreSQL alter column data type to timestamp without time zone
我想将一列数据从文本更改为时间戳类型。 我的数据中没有时区。 我的数据格式类似于28-03-17 17:22,包括时间和日期,但没有时区。 换句话说,我所有的数据都在同一时区。 我该怎么做?
我在下面尝试了多种方法,但仍然找不到正确的方法。 希望您能够帮助我。
当然,如果可以解决我的问题,我可以建立一个新表。
alter table AB
alter create_time type TIMESTAMP;
ERROR: column "create_time" cannot be cast automatically to type timestamp without time zone
HINT: You might need to specify "USING create_time::timestamp without time zone".
********** Error **********
ERROR: column "create_time" cannot be cast automatically to type timestamp without time zone
SQL state: 42804
Hint: You might need to specify "USING create_time::timestamp without time zone".
alter table AB
alter create_time type TIMESTAMP without time zone;
ERROR: column "create_time" cannot be cast automatically to type timestamp without time zone
HINT: You might need to specify "USING create_time::timestamp without time zone".
********** Error **********
ERROR: column "create_time" cannot be cast automatically to type timestamp without time zone
SQL state: 42804
Hint: You might need to specify "USING create_time::timestamp without time zone".
alter table AB
alter create_time::without time zone type TIMESTAMP;
ERROR: syntax error at or near "::"
LINE 2: alter create_time::without time zone type TIMESTAM
^
********** Error **********
ERROR: syntax error at or near "::"
SQL state: 42601
Character: 50
alter table AB
alter create_time UTC type TIMESTAMP;
ERROR: syntax error at or near "UTC"
LINE 2: alter create_time UTC type TIMESTAMP;
^
********** Error **********
ERROR: syntax error at or near "UTC"
SQL state: 42601
Character: 50
如果create_time
是带有有效日期值的TEXT类型的文本, create_time
以下步骤进行更改会更容易(建议首先进行表转储作为备份):
-- Create a temporary TIMESTAMP column
ALTER TABLE AB ADD COLUMN create_time_holder TIMESTAMP without time zone NULL;
-- Copy casted value over to the temporary column
UPDATE AB SET create_time_holder = create_time::TIMESTAMP;
-- Modify original column using the temporary column
ALTER TABLE AB ALTER COLUMN create_time TYPE TIMESTAMP without time zone USING create_time_holder;
-- Drop the temporary column (after examining altered column values)
ALTER TABLE AB DROP COLUMN create_time_holder;
在类型之后USING...
:
... alter create_time type TIMESTAMP USING create_time::TIMESTAMP;
您没有指定create_time的原始类型,所以我假设它是带时区的TIME(因为尝试更改为不带时区的TIMESTAMP时,类型DATE或带时区的TIMESTAMP不会给出上述错误)。 由于TIMESTAMP除了TIME还具有日期信息,因此您需要在ALTER语句中补充日期信息,例如:
ALTER TABLE AB ALTER COLUMN create_time TYPE TIMESTAMP without time zone USING date('20170327') + create_time;
如果您有相应的DATE列(例如create_date),则可以将其传递给date()函数,例如:
ALTER TABLE AB ALTER COLUMN create_time TYPE TIMESTAMP without time zone USING date(create_date) + create_time;
用于将列的数据类型从bigint更改为timestamp(将纪元更改为timestamp)
alter table <tablename> alter column <columnname> type timestamp without time zone using to_timestamp(<columnname>) AT TIME ZONE 'UTC';
例如
alter table AB alter column col type timestamp without time zone using to_timestamp(col) AT TIME ZONE 'UTC';
用于将列的数据类型从时间戳更改为bigint(将时间戳更改为epoch)
alter table <tablename> alter column <columnname> type bigint using extract(EPOCH from <columnname>);
例如
alter table AB alter column col type bigint using extract(EPOCH from col);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.