sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur konverterar man lokal tid till UTC?

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.




  1. Hur man slår samman två MySQL-databaser med samma struktur

  2. Rekommenderade Intel-processorer för SQL Server 2014 – mars 2015

  3. Hur man ändrar alla SQL-kolumner av en datatyp till en annan

  4. Fråga efter det senaste meddelandet i varje konversation med alla andra användare