2012-02-13 5 views
1

У меня есть таблица с столбцом Oracle TIMESTAMP (6) с временной зоной. Таблица содержит записи разных часовых поясов. Я хотел бы обновить все записи таблицы, чтобы быть UTC. Рекомендуемый способ сделать это в запросе UPDATE? Я рассмотрел методы Oracle to_date(), которые предназначены для преобразования строки в дату, и from_tz(), которая преобразует время в определенное время с часовым поясом.Обновление значений часовых поясов таблицы Oracle

Похоже, мне нужен способ запустить запрос и вывести часовой пояс из поля, а затем как-то обновить поле, чтобы поместить его в UTC. Я не хочу, чтобы просто изменить часовой пояс обозначение, я хочу, чтобы компенсировать время суток так

21-JAN-10 03.28.38.713000000 PM -05:00 

станет

21-JAN-10 08.28.38.713000000 PM UTC 

.

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

ответ

1

Вы должны быть в состоянии сделать что-то вроде

UPDATE "Books" 
    SET date_created = date_created at time zone 'UTC' 

который будет делать что-то вроде этого

SQL> create table foo(col1 timestamp with time zone); 

Table created. 

SQL> insert into foo values(current_timestamp); 

1 row created. 

SQL> select * from foo; 

COL1 
--------------------------------------------------------------------------- 
13-FEB-12 01.38.42.372000 PM -05:00 

SQL> update foo 
    2  set col1 = col1 at time zone 'UTC'; 

1 row updated. 

SQL> select * from foo; 

COL1 
--------------------------------------------------------------------------- 
13-FEB-12 06.38.42.372000 PM UTC 

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

+0

Поскольку я разработчик, который использует таблицу, я полностью согласен с вами. «Книги» - это просто пример. Как всегда, ваш опыт Oracle очень ценится. Простой запрос - работает хорошо. –

+0

Возможно ли выборочно выполнять обновление, только обновлять даты, которые не указаны в UTC? Есть триггеры, которые срабатывают при обновлении строки, и я хотел бы свести к минимуму ненужные обновления строк. –

+0

Я считаю, что могу использовать to_char (DATE_CREATED, 'TZH') в предложении WHERE. –