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.