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

Angiv en tidszone, der skal bruges som referencetidszone

Du skal desuden gemme tidszoneforskydningen til timestamp .

Som @Milen allerede har forklaret (og linket til manualen ):et timestamp gemmer kun et tidspunkt (som abstrakt værdi). Tidszonemodifikatoren er ikke gemt, tjener det kun til at justere timestamp i forhold til UTC .

Overvej følgende demo:

-- DROP TABLE tbl;
CREATE TEMP TABLE tbl (id int, myts timestamptz, mytz interval);

INSERT INTO tbl VALUES
 (1, now()                , EXTRACT (timezone from now()) * interval '1s')
,(2, '2012-01-01 00:00-05', interval '-5h')
,(3, '2012-01-01 00:00+04', interval '4h')
,(4, '2012-11-11 20:30+03', interval '3h');

SELECT *
      ,(myts AT TIME ZONE mytz)::text
       || CASE WHEN mytz > '0:0' THEN '+' ELSE '' END
       || to_char(mytz, 'FMHH24:mi') AS timestamp_at_origin
FROM tbl;

Kør det lokalt for at se. Vær særlig opmærksom på detaljerne i PÅ TIDSZONE konstruktion, og hvordan jeg udtrækker tidszonen fra (lokalt!) timestamp with time zone .
now() returnerer timestamp with time zone eller timestamptz for kort.

EXTRACT (timezone from now()) * interval '1s'

timestamp_at_origin viser tidsstemplet med tidszonen som set ved dens oprindelse. Hvis jeg forstod dit spørgsmål, så er det det, du leder efter.
Du kan forbedre formateringen yderligere.

Du kan være interesseret i dette relaterede spørgsmål som kaster lidt lys over tidszonernes tvetydigheder og faldgruber.



  1. Er det dårligt design at bruge arrays i en database?

  2. Sum på tværs af partitioner med vinduesfunktioner

  3. Problem med aktiv postforespørgsel og heroku.

  4. PDO var rækker berørt under execute statement