Dit wordt behandeld in de handleiding , maar het is niet altijd duidelijk hoe je met datums/tijden moet werken. De SQL-specificatie is een beetje bizar.
In het geval van uw vraag is het niet duidelijk of u de tijd in UTC wilt opslaan maar wilt weergeven in de lokale tijd van de server (TimeZone ), of dat u TimeZone . wilt negeren en geef het altijd weer als UTC. Ik ga uit van het laatste.
Voor tijdstempels gebruik je gewoon AT TIME ZONE twee keer, zoals:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
U moet AT TIME ZONE . gebruiken tweemaal. Eenmaal om de invoer timestamp te converteren naar timestamptz volgens het argument tijdzone, dan nog een om die om te zetten in een timestamp bij UTC.
Helaas vanwege de (IMO waanzinnige) manier waarop de SQL-specificatie AT TIME ZONE definieert voor TIME , je kunt niet hetzelfde doen voor TIME . U moet de TimeZone . manipuleren variabele in plaats daarvan:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Dit geeft je nog steeds een timetz geen time . Dus de weergavewaarde verandert met de timezone instelling.