Redshift - 将 UTC 数据转换为其他时区

Posted

技术标签:

【中文标题】Redshift - 将 UTC 数据转换为其他时区【英文标题】:Redshift - Converting UTC data to other timezones 【发布时间】:2018-09-25 11:20:27 【问题描述】:

我正在尝试将数据从 UTC 转换为各种欧洲时区。我正在使用 case 语句,发现仅执行 case 语句中的第一个条件,而未检查其他条件。

SELECT sale_id,appointment_time,timezone,
   case when timezone = 'EDT' then (appointment_time + interval '-4' HOUR * 1)
        when timezone = 'BST' then (appointment_time + interval '1' HOUR * 1)
        when timezone = 'CEST' then (appointment_time + interval '2' HOUR * 1)
        when timezone = 'EEST' then (appointment_time + interval '3' HOUR * 1)
        when timezone = 'MSK' then (appointment_time + interval '3' HOUR * 1)
        when timezone = 'WEST' then (appointment_time + interval '1' HOUR * 1) 
        else null
        end as NewTime
   FROM sales

谁能告诉我我哪里出错了。谢谢

【问题讨论】:

不要自己处理时区转换,使用CONVERT_TIMEZONE。 【参考方案1】:

你错过了其他只是在结束之前添加并使用dateadd函数

SELECT sale_id,appointment_time,timezone,
   case when timezone = 'EDT' then dateadd(h,-4,appointment_time)
        when timezone = 'BST' then dateadd(h,1,appointment_time)
        --------------
         --------------
       else null
        end as NewTime
   FROM sales

【讨论】:

感谢您的反馈,忘记将其添加为我的信息的一部分。它仍然不能与 else 条件正确转换.. @KevinNash 你必须使用 dateadd 函数【参考方案2】:

为什么不使用内置的 convert_timezone 函数。不用箱子会更快

SELECT sale_id, appointment_time, timezone, 
  convert_timezone(timezone, appointment_time) as NewTime
FROM sales

【讨论】:

以上是关于Redshift - 将 UTC 数据转换为其他时区的主要内容,如果未能解决你的问题,请参考以下文章

在 Redshift 中,如何使用 UTC 时区将 current_timestamp 转换为时间戳?

将 UTC 日期转换为其他时区

使用 pytz 将 UTC 转换为其他地方的本地时间

将 UTC 转换为本地时间会返回奇怪的结果

如何将日期正确转换为 UTC,然后再转换回来?

如何在春季禁用将 ZonedDateTime 字段的时区转换为 UTC,仅用于一个字段并将其保留用于所有其他字段?