Преобразовать поле столбца «метка времени с часовым поясом» в текущий часовой пояс сервера - PullRequest
0 голосов
/ 31 августа 2010

Как в Oracle преобразовать «метку времени с часовым поясом» в текущий часовой пояс сервера? Мне нужно динамически определить текущий часовой пояс сервера.

create table test_table1
(rec1 timestamp with time zone)

insert into test_table1(rec1) values (
to_timestamp_tz('1/1/1900 09:00:00 AM US/EASTERN','dd-mm-yyyy hh:mi:ss AM TZR')
)

SELECT NEW_TIME(rec1, TO_CHAR(rec1, 'TZR'), TO_CHAR(SYSTIMESTAMP, 'TZR'))
FROM test_table1

В приведенном выше примере создается таблица со столбцом часового пояса. Затем я вставляю строку в таблицу с восточным часовым поясом. Оператор выбора не работает. Я пытаюсь преобразовать столбец rec_1 в часовой пояс сервера и вернуть его.

Ответы [ 2 ]

0 голосов
/ 11 марта 2014

Oracle преобразует часовые пояса на основе стандартного и летнего времени, если вместо часов и минут смещения "TZH: TZM" используются регионы "TZR".

Для определения вашего региона вы можете использовать (в 11g не уверены в других версиях)

SELECT SYSTIMESTAMP AT TIME ZONE 'US/Eastern' FROM DUAL;

Используемый регион должен храниться в БД, которую вы можете проверить с помощью

SELECT * FROM v$timezone_names WHERE tzname LIKE 'US%';

Этот запрос может быть изменен для определения любого региона.

Руководство по поддержке глобализации Oracle также является хорошим справочным материалом.

0 голосов
/ 01 сентября 2010

Вы можете получить текущий системный часовой пояс [в том или ином формате или в другом] через:

select to_char(systimestamp,'TZD | TZH TZM [ TZR ]'), DBTIMEZONE
from dual;

Следующее может помочь с преобразованием. Не уверен, совпадает ли часовой пояс вашего сеанса с часовым поясом вашей базы данных.

SELECT rec1, SYS_EXTRACT_UTC(rec1), cast(rec1 as timestamp with local time zone)
FROM test_table1

когда я использую systeimestamp, я получаю ноль

TZD может возвращать ноль (например, он знает, какое смещение он имеет, но для него нет псевдонима) TZR не должен. Может быть, что-то вроде ...

SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', to_char(systimestamp,'TZR')) 
   FROM DUAL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...