我有如下数据,但列类型是Varchar:
2019-09-28T23:59:59.52Z
我假设52是毫秒,如果是的话…
我想将其转换为如下,并将列类型更改为时间戳:
2019-09-28 23:59:59.52
有人能告诉我如何在postgreSQL中进行转换吗?
编辑:我可以看到表中的数据为(因为列类型是varchar(:
2019-09-28T23:59:59.52Z
相反,我希望表中的数据显示为:
2019-09-28 23:59:59 ( and may be .52, if possible)
我想我也需要将列类型更改为时间戳,请也帮忙。
答案:
Tim提供了一个解决方案,你可以按照它来做。
但是,在我的情况下,它是prod-env,所以,我刚刚用更改了类型
ALTER TABLE my_table ALTER COLUMN my_column TYPE TIMESTAMP USING my_column::timestamp without time zone;
感谢
您的时间戳字符串文字已经采用了可以在Postgres:中直接转换的格式
SELECT '2019-09-28T23:59:59.52Z'::timestamp; -- 2019-09-28 23:59:59.52
作为测试,让我们增加一天来确保它有效:
SELECT '2019-09-28T23:59:59.52Z'::timestamp + interval '1 day';
-- 2019-09-29 23:59:59.52
如果您想使用另一列的字符串数据实际添加一个新的时间戳列,请尝试:
ALTER TABLE yourTable ADD COLUMN new_ts TIMESTAMP;
UPDATE yourTable SET new_ts = old_ts::timestamp;
ALTER TABLE yourTable DROP COLUMN old_ts;
ALTER TABLE yourTable RENAME COLUMN new_ts TO old_ts; -- optional
如果希望新的真正时间戳列与旧的文本时间戳列具有相同的名称,那么最后一条ALTER
语句是可选的。