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

Sådan konverteres streng til tidsstempel uden tidszone

Strengrepræsentation af et timestamp (=timestamp without time zone ) afhænger af dine lokalitetsindstillinger. For at undgå uklarheder, der fører til datafejl, eller at Postgres hoster op med en undtagelse, har du derfor to muligheder:

1.) Brug ISO 8601-format , som fungerer på samme måde med enhver locale eller DateStyle indstilling:

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

Du skal muligvis caste strengen literal eksplicit, hvor datatypen ikke kan afledes fra kontekst, afhængigt af brugssituationen:

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

2.) Konverter strengen til timestamp ved hjælp af to_timestamp() med et matchende skabelonmønster:

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

Dette returnerer timestamptz under forudsætning af den aktuelle tidszoneindstilling. Typisk (som i en opgave) tvinges typen i overensstemmelse hermed. For timestamp , betyder det, at tidsforskydningen afkortes, og du får den forventede værdi. Igen, hvis måltypen ikke kan afledes fra kontekst, skal du muligvis caste eksplicit:

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

Da det blot fjerner tidsforskydningen, resulterer det i den forventede værdi. Eller brug AT TIME ZONE konstruer med en tidszone efter eget valg:

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

Mens måltidszonen er den samme som din nuværende timezone indstilling finder ingen transformation sted. Ellers transponeres det resulterende tidsstempel i overensstemmelse hermed. Yderligere læsning:

  • Ignorerer tidszoner helt i Rails og PostgreSQL


  1. FEJL 1452:Kan ikke tilføje eller opdatere en underordnet række:en fremmednøglebegrænsning mislykkes

  2. hvad er escape-sekvensen for bindestreg (-) i PostgreSQL

  3. Hvordan kan jeg gå gennem alle rækker i en tabel? (MySQL)

  4. ORA-00054:ressource optaget og anskaffelse med NOWAIT angivet eller timeout udløbet