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 数据转换为其他时区的主要内容,如果未能解决你的问题,请参考以下文章