Toto je popsáno v příručce , ale ne vždy je zřejmé, jak vlastně s daty/časy pracovat. Specifikace SQL je trochu bizarní.
V případě vašeho dotazu není jasné, zda chcete ukládat čas v UTC, ale zobrazovat jej v místním čase serveru (TimeZone
), nebo zda chcete ignorovat TimeZone
a vždy jej zobrazovat jako UTC. Předpokládám to druhé.
Pro časová razítka stačí použít AT TIME ZONE
dvakrát, jako:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Musíte použít AT TIME ZONE
dvakrát. Jednou pro převod vstupního timestamp
na timestamptz
podle argumentu timezone, pak další pro převedení na timestamp
v UTC.
Bohužel kvůli (IMO šílenému) způsobu, jakým specifikace SQL definuje AT TIME ZONE
po dobu TIME
, nemůžete udělat totéž pro TIME
. Budete muset manipulovat s TimeZone
proměnná místo toho:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Stále vám zůstane timetz
ne time
. Jeho zobrazená hodnota se tedy mění s timezone
nastavení.