如何在 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
语句是可选的。
我有如下数据,但是列类型是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
语句是可选的。