Обновление записей таблиц Oracle часовых поясов - PullRequest
1 голос
/ 13 февраля 2012

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

Похоже, мне нужен способ выполнить запрос и извлечь часовой пояс из поля, а затем каким-то образом обновить поле, чтобы поместить его в 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 Ответ

1 голос
/ 13 февраля 2012

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

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

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

...