sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man känner till en tidszon för en tidsstämpel i postgresql 8.3

Jag antar att du har en kolumn som heter ct som har typen TIMESTAMPTZ i tabellen t . Då kan du använda:

SELECT EXTRACT(TIMEZONE FROM ct) FROM t;

för att få tidszonens förskjutning i sekunder. Det som ger dig 3600 från UTC /GMT det betyder antingen GMT+1 , CET eller vad som helst. Värdet som returneras beror på din TIMEZONE inställning.

Exempel (jag bor i Tyskland, faktisk tidszon är GMT+1 /CET ):

test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
      timestamptz       
------------------------
 2008-01-01 18:00:00+01

test=# set timezone to 'gmt';
SET
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz;
      timestamptz       
------------------------
 2008-01-01 17:00:00+00

Som du kan se matar den alltid ut vad som helst i den konfigurerade tidszonen. Så offset du får med EXTRACT(TIMEZONE FROM ...) beror på din TIMEZONE miljö. Tidszonen som gavs på INSERT är förlorad, eftersom det inte är värt att bli frälst. Det som räknas är att allt är korrekt och det bör inte bero på TIMEZONE miljö. PostgreSQL gör det mycket bra.



  1. Skillnaden mellan N'String' vs U'String' bokstaver i Oracle

  2. Oracle DB Användaralias

  3. Varför och när en LEFT JOIN med villkor i WHERE-satsen inte motsvarar samma LEFT JOIN i ON?

  4. infoga i tabellen välj max(kolumnnamn)+1