将 ISO8601 日期文本转换为时间戳
Casting ISO8601 date text to Timestamp
我正在处理 ISO 8601 中的一些日期,当转换为时间戳时,我在毫秒内遇到了一些奇怪的情况:
SELECT '2020-05-15T19:01:59.002+00:00'::timestamp
2020-05-15 19:01:59:02 <--- wrong milliseconds
SELECT '2020-05-15T19:01:59.022+00:00'::timestamp
2020-05-15 19:01:59:22 <--- wrong milliseconds
SELECT '2020-05-15T19:01:59.22+00:00'::timestamp
2020-05-15 19:01:59:220 <--- ok, but I'm scared
我尝试使用 to_timestamp()
但找不到解决字符串中 T 的方法。任何指导表示赞赏!
从您用于访问 Postgres 的任何技术来看,您所看到的似乎只是一个人工制品。如图所示 in this demo,实际上您对时间戳的转换工作正常。考虑以下因素:
WITH yourTable AS (
SELECT '2020-05-15T19:01:59.002+00:00'::timestamp AS ts
)
SELECT
ts,
EXTRACT(milliseconds FROM ts) AS millis
FROM yourTable;
上述查询正确生成 59,002 作为时间戳中的毫秒数。
我正在处理 ISO 8601 中的一些日期,当转换为时间戳时,我在毫秒内遇到了一些奇怪的情况:
SELECT '2020-05-15T19:01:59.002+00:00'::timestamp
2020-05-15 19:01:59:02 <--- wrong milliseconds
SELECT '2020-05-15T19:01:59.022+00:00'::timestamp
2020-05-15 19:01:59:22 <--- wrong milliseconds
SELECT '2020-05-15T19:01:59.22+00:00'::timestamp
2020-05-15 19:01:59:220 <--- ok, but I'm scared
我尝试使用 to_timestamp()
但找不到解决字符串中 T 的方法。任何指导表示赞赏!
从您用于访问 Postgres 的任何技术来看,您所看到的似乎只是一个人工制品。如图所示 in this demo,实际上您对时间戳的转换工作正常。考虑以下因素:
WITH yourTable AS (
SELECT '2020-05-15T19:01:59.002+00:00'::timestamp AS ts
)
SELECT
ts,
EXTRACT(milliseconds FROM ts) AS millis
FROM yourTable;
上述查询正确生成 59,002 作为时间戳中的毫秒数。