sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man konverterar sträng till tidsstämpel utan tidszon

Strängrepresentation av en timestamp (=timestamp without time zone ) beror på dina lokala inställningar. Därför, för att undvika oklarheter som leder till datafel eller att Postgres hostar upp ett undantag, har du två alternativ:

1.) Använd ISO 8601-format , som fungerar på samma sätt med alla locale eller DateStyle inställning:

'2013-08-20 14:52:49'

Du kan behöva casta strängen bokstavligt uttryckligen där datatypen inte kan härledas från kontexten, beroende på användningsfallet:

'2013-08-20 14:52:49'::timestamp

2.) Konvertera strängen till timestamp med to_timestamp() med ett matchande mallmönster:

to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')

Detta returnerar timestamptz , med den aktuella tidszonsinställningen. Typiskt (som i ett uppdrag) tvingas typen i enlighet därmed. För timestamp , betyder detta att tidsförskjutningen trunkeras och du får det förväntade värdet. Återigen, om måltypen inte kan härledas från sammanhanget, kan du behöva casta uttryckligen:

to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')::timestamp

Eftersom det helt enkelt tar bort tidsförskjutningen, resulterar det i det förväntade värdet. Eller använd AT TIME ZONE konstruera med en tidszon som du väljer:

to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss') AT TIME ZONE 'UTC'

Medan måltidszonen är densamma som din nuvarande timezone inställning sker ingen transformation. Annars transponeras den resulterande tidsstämpeln i enlighet därmed. Mer läsning:

  • Ignorerar tidszoner helt och hållet i Rails och PostgreSQL


  1. Varför Cloud Database-övervakningsverktyg för SQL Server är värdefulla

  2. Hur CURDATE() fungerar i MariaDB

  3. PostgreSQL nästa värde för sekvenserna?

  4. En datamodell för barnkalas