Dette er dækket i manualen , men det er ikke altid indlysende, hvordan man rent faktisk arbejder med datoer/klokkeslæt. SQL-specifikationen er en smule bizar.
I tilfælde af dit spørgsmål er det ikke klart, om du vil gemme tiden i UTC, men vise den i serverens lokale tid (TimeZone
), eller om du vil ignorere TimeZone
og vis det altid som UTC. Jeg vil antage det sidste.
Til tidsstempler skal du bare bruge AT TIME ZONE
to gange, f.eks.:
SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';
Du skal bruge AT TIME ZONE
to gange. Én gang for at konvertere input timestamp
til timestamptz
ifølge argumentet tidszone, derefter en anden for at konvertere det til et timestamp
ved UTC.
Desværre på grund af den (IMO vanvittige) måde, SQL-specifikationen definerer AT TIME ZONE
i TIME
, du kan ikke gøre det samme i TIME
. Du bliver nødt til at manipulere TimeZone
variabel i stedet:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
Dette efterlader dig stadig med en timetz
ikke et time
. Så dens visningsværdi ændres med timezone
indstilling.