我的表中有文本格式的时间戳。格式为2019-05-30T05:48:29.095705642+01:00
。我想将其转换为UTC时间戳。
我正在考虑先将文本转换为时间戳,然后将其转换为UTC。我正在执行SELECT TO_TIMESTAMP('2019-05-30T05:48:29.095705642+01:00', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"')
,但是不起作用。我无法弄清楚。
答案 0 :(得分:1)
对于毫秒(.MS
),您只能使用3个十进制数字。如果您改用.US
,则可以转换6位数字。
但是,如果您不想在单独的操作中剥离数字(并且如果您确定总会有3位数字),则可以通过添加9模式(US999
)来忽略它们。结果将与使用之前剥离的结果相同。
SELECT
TO_TIMESTAMP(
'2019-05-30T05:48:29.095705642+01:00',
'YYYY-MM-DD"T"HH24:MI:SS.US999"Z"'
)
SELECT '2019-05-30T05:48:29.095705642+01:00'::timestamptz
从文本转换为时间戳后,您可以使用at time zone 'UTC'
切换时区:
SELECT '2019-05-30T05:48:29.095705642+01:00'::timestamptz at time zone 'UTC'
如注释中所述:时区未正确考虑。 "Z"
仅忽略字母Z。要解析时区,您需要编写TZH:TZM
。您只是应该使用PostgreSQL魔术的另一个原因。