2012-02-09 3 views
4

У меня есть столбец в таблице Oracle DB, который имеет тип TIMESTAMP(6) WITH TIME ZONE. Существуют строки данных с данными разных часовых поясов, некоторые UTC, некоторые в других смещениях временного интервала.Запрос Oracle TIMESTAMP с TIMEZONE

Есть ли способ, которым я могу запросить таблицу Oracle, чтобы результаты всегда возвращались как UTC, когда выполнялось соответствующее изменение времени? Есть ли что-то, что можно сделать по самому запросу или, возможно, изменить сеанс? Я попытался изменить часовой пояс сеанса на Utc, но это, похоже, влияет только на значение CURRENT_TIMESTAMP.

ALTER SESSION SET TIME_ZONE = 'Utc' 

Например, если значение было сохранено как:

21-JAN-10 03.28.38.635000000 PM -05:00 

запрос вернется в

21-JAN-10 08.28.38.635000000 PM Utc 

определение Пример таблицы

CREATE TABLE "MyDb"."Books" 
    (
    "GUID" RAW(32) DEFAULT SYS_GUID(), 
    "DATE_CREATED" TIMESTAMP (6) WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, 
); 

ответ

11

Вы должны быть способный использовать AT TIME ZONE синтаксис

SELECT column_name at time zone 'UTC' 
    FROM your_table 

т.е.

SQL> select * from foo; 

COL1 
--------------------------------------------------------------------------- 
09-FEB-12 01.48.40.072000 PM -05:00 
09-FEB-12 10.49.26.613000 AM US/PACIFIC 

SQL> select col1 at time zone 'UTC' 
    2 from foo; 

COL1ATTIMEZONE'UTC' 
--------------------------------------------------------------------------- 
09-FEB-12 06.48.40.072000 PM UTC 
09-FEB-12 06.49.26.613000 PM UTC 
+0

Я предполагаю, что нет никакого способа, я могу изменить сеанс, поэтому логика «AT TIME ZONE„UTC“» автоматически? –

+2

@StealthRabbi. Если столбец был «TIMESTAMP WITH LOCAL TIME ZONE», значение будет неявно преобразовано в часовой пояс сеанса, который может быть установлен в UTC. «TIMESTAMP WITH TIME ZONE» отображается в любом часовом поясе, в который он был вставлен, если вы не конвертируете его с чем-то вроде синтаксиса «AT TIME ZONE». –