如何将包含时区的时间戳varchar转换为时间戳类型

时间:2019-09-12 15:23:05

标签: sql postgresql timestamp

我具有类似'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(类型是时间戳)

1 个答案:

答案 0 :(得分:1)

demo:db<>fiddle


如果您只是想将字符串放入包含时区的时间戳记中:

只需将其转换为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