Как эта временная метка teradata с примером часового пояса имеет смысл? - PullRequest
0 голосов
/ 17 апреля 2019

В документации по терадате написано:

"Предположим, что установка находится в часовом поясе PST, и это канун Нового года, 1998-12-31 20:30 по местному времени.

Внутренняя система TIMESTAMP WITH TIME ZONE на указанное время: «1999-01-01 04: 30-08: 00» внутри. "

Это не соответствует моему пониманию. Я считаю, что это должно быть '1999-01-01 04:30+00:00' внутри, потому что оно должно храниться в UTC. Или, это может быть сохранено как местное время со смещением -8, но этот пример, кажется, смешивает два. Возможно, я неправильно понимаю текст?

1 Ответ

0 голосов
/ 17 апреля 2019

Не уверен, если это ответ, но он слишком длинный для комментария.

Эта «внутренняя» часть хранилища вводит в заблуждение. Нам все равно, как Teradata хранит что-либо внутри.

Мне проще взглянуть на использование BTEQ, поскольку SQL Assistant не показывает часовые пояса, по крайней мере по умолчанию. Итак, если вы вошли в BTEQ ...

    --set session timezone to pst (GMT - 8)
    SET TIME  ZONE INTERVAL -'08:00' HOUR TO MINUTE ;
    create volatile table vt_foo ( 
    ts_w_zone  timestamp(0) with time zone, 
    ts_wo_zone timestamp) on commit preserve rows;
    insert into vt_foo 
    select
    cast('1998-12-31 20:30:00' as timestamp(0)),
    cast('1998-12-31 20:30:00' as timestamp);
select * from vt_foo;

В настоящее время два значения (с tz и без) будут совпадать.

                ts_w_zone                  ts_wo_zone
-------------------------  --------------------------
1998-12-31 20:30:00-08:00  1998-12-31 20:30:00.000000

Теперь давайте изменим часовой пояс для вашего сеанса на другой, и посмотрим, что мы получим.

SET TIME  ZONE INTERVAL -'03:00' HOUR TO MINUTE ;
select * from vt_foo;

                ts_w_zone                  ts_wo_zone
-------------------------  --------------------------
1998-12-31 20:30:00-08:00  1999-01-01 01:30:00.000000

Метка времени с зоной остается прежней. Отображение его без часового пояса автоматически преобразует его в часовой пояс вашего сеанса, который в данном примере равен GMT -3.

EDIT: Технически, Teradata фактически хранит время с часовым поясом как GMT (1999-01-01 04:30:00) со смещением часового пояса (-8). Вот откуда документация получает значение 1999-01-01 04: 30-08: 00). Но это не так, как это отображается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...