#oracle #timestamp-with-timezone
#Oracle #временная метка с часовым поясом
Вопрос:
У меня следующий запрос:
SELECT
from_tz(CAST(e.Event_Time_UTC AS TIMESTAMP), 'UTC') AS UTC,
from_tz(CAST(e.Event_Time_UTC AS TIMESTAMP), 'UTC') AT TIME ZONE 'Brazil/East' AS BRT,
TO_CHAR(from_tz(CAST(e.Event_Time_UTC AS TIMESTAMP), 'UTC') AT TIME ZONE 'Brazil/East', 'HH24:MI') AS Hora
FROM
MY_EVENTS e
ORDER BY
UTC
Я получаю время UTC и конвертирую в местное.
Все работает нормально, когда я конвертирую напрямую, но когда я использую TO_CHAR, я теряю переход на летнее время и в итоге результат выглядит следующим образом:
Может кто-нибудь, пожалуйста, объяснить, что происходит, пожалуйста?
РЕДАКТИРОВАТЬ: Вот результат от v$timezone_file
:
Комментарии:
1. Я не вижу такого поведения в моей копии Oracle.
with e (event_time_utc) as ( select to_timestamp('17/10/16 13:30:00', 'dd/mm/yy hh24:mi:ss') from dual ) SELECT..... FROM e
выдает тот же результат, 11:30, в последних двух столбцах.2. Как вы думаете, это может иметь какое-то отношение к версии? Мой — 10.2.0.4.0
3. Я был бы удивлен …. не уверен. У
to_char()
нет причин менять время (то есть я не могу придумать никакой причины).4. Единственное, что я вижу, это то, что он не переходит на летнее время.
5. Я возился и увидел, что ИЗВЛЕЧЕНИЕ (ЧАС ИЗ BRT) дает тот же результат, что и ‘HORA’