Redshift - преобразование данных UTC в другие часовые пояса - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь преобразовать данные из 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

Может кто-нибудь посоветовать, где я ошибаюсь.Спасибо

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Почему бы вам не использовать встроенную функцию convert_timezone.Это будет быстрее, так как вам не нужно использовать чехол

SELECT sale_id, appointment_time, timezone, 
  convert_timezone(timezone, appointment_time) as NewTime
FROM sales
0 голосов
/ 25 сентября 2018

вы пропустили, просто добавьте до конца и используйте 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
...