Това е описано в ръководството , но не винаги е очевидно как всъщност да работите с дати/часове. SQL спецификацията е малко странна.
В случая на вашия въпрос не е ясно дали искате да съхранявате часа в UTC, но да го показвате в местното време на сървъра (TimeZone
), или дали искате да игнорирате TimeZone
и винаги го показвайте като UTC. Ще приема последното.
За времеви клеймца просто бихте използвали AT TIME ZONE
два пъти, като:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Трябва да използвате AT TIME ZONE
два пъти. Веднъж за преобразуване на въведеното timestamp
към timestamptz
според аргумента часова зона, след това друг, за да го преобразувате в timestamp
в UTC.
За съжаление поради (безумния IMO) начин, по който SQL спецификацията дефинира AT TIME ZONE
за TIME
, не можете да направите същото за TIME
. Ще трябва да манипулирате TimeZone
вместо променлива:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Това все още ви оставя с timetz
не е time
. Така че показваната му стойност се променя с timezone
настройка.