如何在 postgreSQL 中将 varchar 转换为时间戳?

How to convert varchar to timestamp in postgreSQL?

我有如下数据,但是列类型是Varchar:

2019-09-28T23:59:59.52Z

我假设这里的 52 是毫秒,如果是这样..

我想按如下方式转换并将列类型更改为时间戳:

2019-09-28 23:59:59.52

谁能告诉我如何在 postgreSQL 中进行转换?

编辑: 我可以看到 table 中的数据为(因为列类型是 varchar):

2019-09-28T23:59:59.52Z

相反,我希望 table 中的数据显示为:

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 语句是可选的。