sql - 如何将包含时区的时间戳 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 (其中类型是时间戳)
解决方案
如果您只是想将字符串转换为保存时区的时间戳:
只需将其转换为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