【问题标题】:How to convert timestamp without timezone and integer representing timezone to a new timestamp without timezone in PostgreSQL如何在PostgreSQL中将没有时区的时间戳和表示时区的整数转换为没有时区的新时间戳
【发布时间】:2022-02-02 02:36:59
【问题描述】:

假设我有一个包含两个字段的表:snapshot_date(没有时区的时间戳)和时区(整数),

snapshot_date timezone
2021-01-12 08:00:00 -3
2021-01-12 00:00:00 -5

我需要从这个表中提取本地时间,我尝试使用(EXTRACT (hour from timestamp))::integer + timezone,这适用于第一行,给出5 的小时结果,但第二行你得到-5,应该实际上是19,因为用时区调整的相应日期是2021-01-11 19:00:00。所以我想要做的是计算一个新的快照日期调整时区,这样我就可以正确提取小时后。

【问题讨论】:

    标签: sql postgresql date timestamp timezone


    【解决方案1】:

    您需要先将小时数添加到时间戳中,然后提取小时数:

    extract(hour from snapshot_date + make_interval(hours => timezone))
    

    【讨论】:

      【解决方案2】:

      设法获得预期的结果:

      extract(hour from snapshot_date + interval '1 hour' * timezone)
      

      【讨论】:

        【解决方案3】:

        类似:

        show timezone; US/Pacific 
        select ('2021-01-12 08:00:00'::timestamp::text || (-3)::text)::timestamptz; 
        2021-01-12 03:00:00-08
        
        select extract(hour from('2021-01-12 08:00:00'::timestamp::text || (-3)::text)::timestamptz);
        3
        

        【讨论】:

          猜你喜欢
          • 2014-02-12
          • 2017-04-25
          • 2011-12-14
          • 2018-07-10
          • 1970-01-01
          • 2018-12-18
          • 1970-01-01
          • 2023-03-03
          • 1970-01-01
          相关资源
          最近更新 更多