Detta beskrivs i manualen , men det är inte alltid självklart hur man faktiskt arbetar med datum/tider. SQL-specifikationen är lite bisarr.
När det gäller din fråga är det inte klart om du vill lagra tiden i UTC men visa den i serverns lokala tid (TimeZone
), eller om du vill ignorera TimeZone
och alltid visa det som UTC. Jag antar det senare.
För tidsstämplar använder du bara AT TIME ZONE
två gånger, som:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Du måste använda AT TIME ZONE
dubbelt. En gång för att konvertera indata timestamp
till timestamptz
enligt argumentet tidszon, sedan en annan för att konvertera det till en timestamp
vid UTC.
Tyvärr på grund av det (IMO vansinniga) sättet som SQL-specifikationen definierar AT TIME ZONE
under TIME
, du kan inte göra samma sak under TIME
. Du måste manipulera TimeZone
variabel istället:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Detta lämnar dig fortfarande med en timetz
inte en time
. Så dess visningsvärde ändras med timezone
inställning.