Почему часовой пояс не меняется в этих выражениях SQL? - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь обновить часовой пояс в определенном поле одной из моих таблиц. Я пытался несколькими способами, замеченными в некоторых сообщениях SO, но ничто, кажется, не изменяет фактическое значение часового пояса.

Любой может объяснить, почему ...

select 
    now(), 
    extract(timezone from now()) * interval '1sec', 
    (now()::timestamp || 'PST8PDT')::timestamptz, 
    extract(timezone from (now()::timestamp || 'PST8PDT')::timestamptz) * interval '1sec'

Все эти поля имеют одинаковый часовой пояс? Результаты для меня в Форталезе / Бразилия:

2018-10-29 14:52:04.55495-03 | -03:00:00 | 2018-10-29 18:52:04.55495-03 | -03:00:00"

Почему? Разве последние 2 значения не должны иметь часовой пояс PST?

Как я могу на самом деле изменить часовой пояс для поля timestamp with time zone?

1 Ответ

0 голосов
/ 30 октября 2018

Вы не можете изменить часовой пояс, потому что тип данных timestamp with time zone фактически не сохраняет часовой пояс для начала. Часовой пояс служит только модификатором ввода / вывода. Внутри сохраняется соответствующее значение метки времени UTC.

Настройка timezone текущего сеанса определяет отображение значения. Чтобы изменить отображение, измените настройку timezone. (То есть притворяется, что находится в другом часовом поясе, где текущее время отображается по-разному.)

Пример:

SET timezone = 'PST8PDT';

Затем повторите тест.

Конструкция AT TIME ZONE также может быть полезной.

Связанный:

...