postgreSQL将列数据类型更改为没有时区的时间戳

Amy*_*Amy 5 sql postgresql timestamp

我想将一列数据从文本更改为时间戳类型。我的数据中没有时区。我的数据格式类似于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".
Run Code Online (Sandbox Code Playgroud)
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".
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

Leo*_*o C 8

如果create_timeTEXT类型的文本具有有效的日期值,则按以下步骤进行更改会更容易(建议先进行表转储作为备份):

-- 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;
Run Code Online (Sandbox Code Playgroud)


Jas*_*sen 7

USING... 出现在类型之后:

... alter create_time type TIMESTAMP USING create_time::TIMESTAMP;
Run Code Online (Sandbox Code Playgroud)