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

Rozdíl mezi časovými razítky s/bez časového pásma v PostgreSQL

Rozdíly jsou popsány v dokumentaci PostgreSQL pro typy data/času. Ano, zpracování TIME nebo TIMESTAMP se liší mezi jedním WITH TIME ZONE nebo WITHOUT TIME ZONE . Nemá vliv na způsob uložení hodnot; ovlivňuje to, jak jsou interpretovány.

Vliv časových pásem na tyto datové typy je popsán konkrétně v dokumentech. Rozdíl vyplývá z toho, co může systém o hodnotě rozumně vědět:

  • Pokud je součástí hodnoty časové pásmo, lze hodnotu v klientovi vykreslit jako místní čas.

  • Bez časového pásma jako součásti hodnoty je zřejmé výchozí časové pásmo UTC, takže se vykresluje pro toto časové pásmo.

Chování se liší v závislosti alespoň na třech faktorech:

  • Nastavení časového pásma v klientovi.
  • Datový typ (tj. WITH TIME ZONE nebo WITHOUT TIME ZONE ) hodnoty.
  • Zda je hodnota uvedena s konkrétním časovým pásmem.

Zde jsou příklady pokrývající kombinace těchto faktorů:

foo=> SET TIMEZONE TO 'Japan';
SET
foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP;
      timestamp      
---------------------
 2011-01-01 00:00:00
(1 row)

foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP WITH TIME ZONE;
      timestamptz       
------------------------
 2011-01-01 00:00:00+09
(1 row)

foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP;
      timestamp      
---------------------
 2011-01-01 00:00:00
(1 row)

foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP WITH TIME ZONE;
      timestamptz       
------------------------
 2011-01-01 06:00:00+09
(1 row)

foo=> SET TIMEZONE TO 'Australia/Melbourne';
SET
foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP;
      timestamp      
---------------------
 2011-01-01 00:00:00
(1 row)

foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP WITH TIME ZONE;
      timestamptz       
------------------------
 2011-01-01 00:00:00+11
(1 row)

foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP;
      timestamp      
---------------------
 2011-01-01 00:00:00
(1 row)

foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP WITH TIME ZONE;
      timestamptz       
------------------------
 2011-01-01 08:00:00+11
(1 row)


  1. Jak převést unixové časové razítko na hodnotu data/času v PostgreSQL

  2. Django modeluje jeden cizí klíč k mnoha tabulkám

  3. Jak volat funkci Oracle nebo uloženou proceduru pomocí frameworku spring persistence?

  4. Jak funguje TIMEDIFF() v MariaDB