sql >> Databáze >  >> RDS >> PostgreSQL

Zadejte časové pásmo, které se má použít jako referenční časové pásmo

Kromě toho musíte uložit posun časového pásma na timestamp .

Jak již vysvětlil @Milen (a propojen s příručkou ):timestamp uloží pouze bod v čase (jako abstraktní hodnotu). Modifikátor časového pásma není uložen, slouží pouze k úpravě timestamp vzhledem k UTC .

Zvažte následující ukázku:

-- 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;

Spusťte jej lokálně a uvidíte. Věnujte zvláštní pozornost podrobnostem V ČASOVÉ ZÓNĚ konstrukci a jak extrahuji časové pásmo z (místního!) timestamp with time zone .
now() vrátí timestamp with time zone nebo timestamptz ve zkratce.

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

timestamp_at_origin zobrazí časové razítko s časovou zónou, jak je vidět v jeho počátku. Pokud jsem pochopil vaši otázku, pak je to, co hledáte.
Mohli byste dále zlepšit formátování.

Mohla by vás zajímat tato související otázka který vrhá trochu světla na nejasnosti a úskalí časových pásem.



  1. Když princip DRY neplatí:BITWISE operace v SQL Serveru

  2. Oprava „CHYBA 1136 (21S01):Počet sloupců neodpovídá počtu hodnot na řádku 1“ při vkládání dat do MariaDB

  3. nový oddělovač řádků nefunguje pro funkci group_concat

  4. PHP Třídění nejbližších souřadnic