sql >> Databasteknik >  >> RDS >> PostgreSQL

Skillnad mellan tidsstämplar med/utan tidszon i PostgreSQL

Skillnaderna täcks av PostgreSQL-dokumentationen för datum/tidstyper. Ja, behandlingen av TIME eller TIMESTAMP skiljer sig mellan en WITH TIME ZONE eller WITHOUT TIME ZONE . Det påverkar inte hur värdena lagras; det påverkar hur de tolkas.

Effekterna av tidszoner på dessa datatyper behandlas specifikt i dokumenten. Skillnaden beror på vad systemet rimligen kan veta om värdet:

  • Med en tidszon som en del av värdet kan värdet återges som en lokal tid i klienten.

  • Utan en tidszon som en del av värdet är den uppenbara standardtidszonen UTC, så den återges för den tidszonen.

Beteendet skiljer sig beroende på minst tre faktorer:

  • Tidszonsinställningen i klienten.
  • Datatypen (dvs. WITH TIME ZONE eller WITHOUT TIME ZONE ) av värdet.
  • Om värdet är specificerat med en viss tidszon.

Här är exempel som täcker kombinationerna av dessa faktorer:

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. DELETE VS DROP i SQL

  2. Hur konverterar man rader till kolumner i Oracle?

  3. Vilken tidsstämpeltyp ska jag välja i en PostgreSQL-databas?

  4. Hur man returnerar Unicode-värdet för en given karaktär i SQL Server – UNICODE()