将 ISO8601 日期文本转换为时间戳

Gab*_*lla 4 postgresql dbeaver postgresql-11

我正在处理 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
Run Code Online (Sandbox Code Playgroud)

我尝试使用to_timestamp()但找不到解决字符串中 T 的方法。任何指导表示赞赏!

Tim*_*sen 6

从您用来访问 Postgres 的任何技术来看,您所看到的似乎只是一个工件。如本演示所示,实际上您对时间戳的转换工作正常。考虑以下:

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;
Run Code Online (Sandbox Code Playgroud)

上述查询正确生成 59,002 作为时间戳中的毫秒数。