Преобразование часового пояса в запросе SQL

Я использую запрос, чтобы получить некоторую дату получения приложения из БД Oracle, которая хранится как GMT. Теперь мне нужно преобразовать это в восточное стандартное / летнее время при поиске. Я использую следующий запрос для этого:

   select to_char (new_time(application_recv_date,'gmt','est'), 'MON dd, YYYY') from application

Он отлично работает в течение стандартного времени. Но для перехода на летнее время нам нужно преобразовать его в 'edt' на основе информации о часовом поясе. Я не очень уверен, как это сделать. Пожалуйста, помогите мне

2 ответа

Решение

Вы можете использовать этот запрос, не беспокоясь об изменениях часового пояса.

select to_char(cast(application_recv_date as timestamp) at time zone 'US/Eastern',
               'MON dd, YYYY'
              )
from application;

Пример:

ЛЕТНЕЕ СЕВЕРОАМЕРИКАНСКОЕ ВОСТОЧНОЕ ВРЕМЯ:

select cast(date'2014-04-08' as timestamp) d1,
       cast(date'2014-04-08' as timestamp) at time zone 'US/Eastern' d2
from dual;

D1                                 D2
---------------------------------- -------------------------------------------
08-APR-14 12.00.00.000000 AM       07-APR-14 08.00.00.000000 PM US/EASTERN

СТАНДАРТНОЕ ВОСТОЧНОЕ ВРЕМЯ:

select cast(date'2014-12-08' as timestamp) d1,
       cast(date'2014-12-08' as timestamp) at time zone 'US/Eastern' d2
from dual;

D1                                 D2
---------------------------------- -------------------------------------------
08-DEC-14 12.00.00.000000 AM       07-DEC-14 07.00.00.000000 PM US/EASTERN

ОБНОВИТЬ:

Спасибо Алексу Пулу за напоминание о том, что, когда часовой пояс не указан, для конвертации используется местный часовой пояс.

Чтобы дата была распознана как GMT, используйте from_tz.

from_tz(cast(date'2014-12-08' as timestamp), 'GMT') at time zone 'US/Eastern'

В Oracle вы можете достичь этого с помощью следующего запроса:

Select current_timestamp, current_timestamp at time zone 'Australia/Sydney' from dual;

куда Australia/Sydney это название вашего часового пояса, в который вы хотите конвертировать свое время.

Уже существует функция, которая преобразует время нужного столбца из одного часового пояса в другой: -

 convert_tz("columname or / the time you want to convert", fromTimeZone, ToTimeZone)

Например: - Я хочу преобразовать время столбца dateTIme из индийского времени (IST) в часовой пояс Бразилии, поскольку время моей базы данных хоста по умолчанию находится в Индии, это занимает индийское время: -

  1. Индийское время: GMT+5:30
  2. Бразилия ВРЕМЯ GMT-5:30

convert_tz (dl.modified_datetime, '+ 5:30', '- 3:00') 'Modified_time'

Итак, в этом процессе вы можете легко его преобразовать.

Другие вопросы по тегам