sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan konverteres lokal tid til UTC?

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.




  1. Hvorfor og hvornår skal jeg bruge SPARSE COLUMN? (SQL SERVER 2008)

  2. PostgreSQL UUID-type ydeevne

  3. MySQL-injektion af LIKE-operatør

  4. MySQL IF/CASE-syntaks, der kalder forskellige SELECT-sætninger