Преобразовать временную метку / дату из UTC в EST Oracle SQL
-
20-09-2019 - |
Вопрос
У меня есть поле со значением даты / времени, подобным этому:
2009-11-17 18:40:05
Это в UTC.В запросе, как я могу преобразовать это в EST?
Я пытаюсь сделать что-то подобное, но это выдает ошибку.
// datetime is the field name
SELECT
FROM_TZ(TIMESTAMP TO_DATE(datetime, 'yyyy-mm-dd hh24miss'), 'EST') AS DT
FROM
db_name
Решение
Мне пришлось немного подправить его, чтобы заставить работать в моей базе данных, но это сработало:
select from_tz(to_timestamp('2009-11-17 18:40:05','yyyy-mm-dd hh24:mi:ss'), 'UTC')
at time zone 'America/New_York' from dual
Ключевым моментом является синтаксис "в часовом поясе".
Другие советы
Если вы хотите преобразовать поле даты из UTC в EST, у меня это сработало:
CAST(FROM_TZ(CAST(DATE_FIELD AS TIMESTAMP), 'UTC')
at time zone 'America/New_York' AS Date) as DESIRED_FIELD_NAME
Сначала я преобразовал желаемое поле даты (как DATE_FIELD) в метку времени.Результатом приведения является первый параметр функции FROM_TZ, которая требует, чтобы параметр имел тип TIMESTAMP .Второй параметр - "UTC", поскольку это то, с чего мы меняемся.
Затем я преобразую результаты этого обратного вызова функции в тип DATE и присваиваю ему псевдоним.
select to_char(systimestamp at time zone 'EST','HH') EST_TIME,
TO_CHAR(SYSDATE,'HH') EDT_TIME,
NEW_TIME(SYSDATE,
(
CASE
WHEN to_char(systimestamp at time zone 'EST','HH') = TO_CHAR(SYSDATE,'HH')
THEN 'EST'
ELSE 'EDT'
END
),'GMT')
from dual