【问题标题】:Convert UTC based on a separate time zone column - Postgres根据单独的时区列转换 UTC - Postgres
【发布时间】:2018-10-21 21:33:42
【问题描述】:

我有一张桌子:

  • 来源日期列
  • 源时间戳(30 分钟间隔,字符串)
  • 日期时间 UTC timestamptz 列
  • “报告”时区(时区最终应如何显示)

    date      interval     datetime_utc     time_zone
    

    2018-05-11 22:30 2018-05-10 03:30:00 美国/纽约

有没有一种有效的方法可以将 datetime_utc 列转换为查询或视图中同一行中指示的时区?我可以使用 Python 做到这一点,但我想知道如何直接在我的查询中做到这一点。

这似乎可行 - 我可以引用列名,它会根据在该行中找到的值准确地转换它。

 (interval_timestamp_utc :: TIMESTAMPTZ AT TIME ZONE time_zone) :: DATE AS "Reporting Date",

 to_char((interval_timestamp_utc :: TIMESTAMPTZ AT TIME ZONE time_zone), 'HH24:MI') AS "Reporting Interval",

【问题讨论】:

  • select '2018-05-10 03:30:00'::timestamp at time zone 'America/New_York'; ?另请查看pg_catalog.pg_timezone_abbrevspg_catalog.pg_timezone_names 表。
  • 每一行都有不同的时区 - 我没有选择特定的行。我正在查询一个包含大约 1 到 200 万行的完整日历日,并且我正在将源时区转换为用于可视化的“显示”时区。

标签: postgresql datetime timezone


【解决方案1】:

我认为AT TIME ZONE 构造应该是您正在寻找的。在您的情况下,SELECT TIMESTAMP WITH TIME ZONE datetime_utc AT TIME ZONE time_zone 应该为您提供没有针对该特定时区偏移的时间戳。

更多详情请见https://www.postgresql.org/docs/9.6/static/functions-datetime.html#FUNCTIONS-DATETIME-ZONECONVERT

【讨论】:

  • 嗨 - 只是想确保如果每一行都有不同的时区,这仍然有效。目前大约有 20 多个独特的。
  • 这似乎有效,它比我的 CASE WHEN 语句短得多,有 20 多个条目,谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-10-16
  • 2018-04-28
  • 2022-01-09
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-10
  • 2017-01-31
相关资源
最近更新 更多