首页 > 解决方案 > 如何将包含时区的时间戳 varchar 转换为时间戳类型

问题描述

我有如下类型的时间戳'2018-04-18T18:11:16+01:00'varchar并希望将它们转换为一种timestamp类型。我在使用to_timestamp(). 是否有一种特定的方法可以使用该to_timestamp()功能来进行我想要的转换?如果没有,还有其他方法可以实现我的目标吗?

正在做

to_timestamp('2018-04-18T18:11:16+01:00', 'DD-MM-YYYY HH24:MI:SS')

给出一个错误

错误:日期/时间字段值超出范围:“2018-04-18T18:11:16+01:00”

我希望像 '2018-04-18T18:11:16+01:00' 这样的 varchars 被转换为 2018-04-18 17:11:16 (其中类型是时间戳)

标签: sqlpostgresqltimestamp

解决方案


演示:db<>小提琴


如果您只是想将字符串转换为保存时区的时间戳:

只需将其转换为timestamp with time zone(= timestamptz) 类型:

SELECT '2018-04-18T18:11:16+01:00'::timestamptz


如果您只想削减时区部分并保持时间而不进行任何进一步计算:只需将其转换为类型timestamp without time zone(= timestamp)

SELECT '2018-04-18T18:11:16+01:00'::timestamp

如果要将其转换为 UTC 时间戳(计算 -1),您可以执行以下操作:

SELECT ('2018-04-18T18:11:16+01:00' AT TIME ZONE 'UTC')::timestamp

推荐阅读