【问题标题】:Postgres: JSONB string to timestamp with TZPostgres:带有 TZ 的 JSONB 字符串到时间戳
【发布时间】:2015-05-28 08:43:12
【问题描述】:

在 postgres 数据库 (9.4) 中,我将数据保存为 JSON 对象。包括一些日期时间元素。为了在 sql 查询中进行时间比较,我必须将此字符串转换为时间戳。我试过这个查询:

SELECT to_timestamp('2015-05-22T10:56:04.949Z','YYYY-MM-DD HH:MI:SS.MS');
-- dummy query just to test converting

OUTPUT: 2015-05-22 10:56:04.949+03

它基本上可以正常工作,除了我不知道如何在其中包含时区参数。这个字符串是 UTC 时间上午 10:56,如果我运行这个查询,我会在 +03 时区得到 10:56(+03 是我的本地时区)。根据 Postgres 文档,应该将 TZ 添加到格式字符串以获取时区,但它不起作用。

如何格式化此字符串,使其还包含初始日期时间字符串中的时区?

【问题讨论】:

    标签: json postgresql


    【解决方案1】:

    据我所知,无法从字符串中解析时区。
    但是,如果您知道您的时间戳始终处于 UTC 时区,您可以使用:

    SELECT to_timestamp('2015-05-22T10:56:04.949Z','YYYY-MM-DD HH:MI:SS.MS')::timestamp at time zone '00:00'
    

    【讨论】:

    • 我用“2016-08-12T18:33:17.157Z”试过这个,但我遇到了一个例外。错误:小时“18”对于 12 小时制无效。 SQL 状态:22007。提示:使用 24 小时制,或在 1 到 12 之间给出一个小时。
    • 尝试使用'YYYY-MM-DD HH24:MI:SS.MS' 模式。
    猜你喜欢
    • 2019-11-22
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    相关资源
    最近更新 更多