【问题标题】:Casting ISO8601 date text to Timestamp将 ISO8601 日期文本转换为时间戳
【发布时间】:2020-07-15 03:14:02
【问题描述】:

我正在处理 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 的方法。任何指导表示赞赏!

【问题讨论】:

  • It is working for me here in this demo。我认为问题可能是您没有以预期的格式查看输出。
  • @TimBiegeleisen 是的! Dbeaver 在耍我!请回答。感谢您的宝贵时间!
  • 我在psql 中为 postgres 13 测试了它,它工作正常。可能它也应该在 Postgres 12 中工作。

标签: postgresql dbeaver postgresql-11


【解决方案1】:

从您用于访问 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 作为时间戳中的毫秒数。

【讨论】:

    猜你喜欢
    • 2015-01-20
    • 2014-01-25
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多