PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Разлика между времеви отпечатъци с/без часова зона в PostgreSQL

Разликите са обхванати в документацията на PostgreSQL за типовете дата/час. Да, лечението на TIME или TIMESTAMP се различава между един WITH TIME ZONE или WITHOUT TIME ZONE . Това не влияе върху начина, по който се съхраняват стойностите; това се отразява на начина, по който се тълкуват.

Ефектите на часовите зони върху тези типове данни са обхванати специално в документите. Разликата произтича от това, което системата може разумно да знае за стойността:

  • С часова зона като част от стойността, стойността може да бъде изобразена като местно време в клиента.

  • Без часова зона като част от стойността, очевидната часова зона по подразбиране е UTC, така че се изобразява за тази часова зона.

Поведението се различава в зависимост от поне три фактора:

  • Настройката на часовата зона в клиента.
  • Типът данни (т.е. WITH TIME ZONE). или WITHOUT TIME ZONE ) от стойността.
  • Дали стойността е посочена с определена часова зона.

Ето примери, обхващащи комбинациите от тези фактори:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализациите на полето JSON не се запазват в DB

  2. Изтриване на записи от отдалечена postgresql база данни с помощта на локално предоставен списък

  3. Как да разберем ОБЯСНИТЕЛЕН АНАЛИЗ

  4. Как да изброя всички потребители в PostgreSQL

  5. Как мога да стартирам PostgreSQL на Windows?