sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur make_timestamptz() fungerar i PostgreSQL

I PostgreSQL, make_timestamptz() funktionen låter dig skapa en tidsstämpel med tidszon från dess fält för år, månad, dag, timme, minut och sekunder, samt ett valfritt tidszonsfält.

Syntax

Funktionen har följande syntax:

make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])

Där year , month och day är heltal som representerar år, månad och dag för datumet och hour är timdelen, min är minutdelen och sec är den andra delen.

Timmen och minuterna anges som ett heltal , sekunderna tillhandahålls som dubbel precision .

Den valfria timezone argumentet är för tidszonen. Om det inte är specificerat används den aktuella tidszonen.

Resultatet returneras som en tid med tidszon .

Exempel

Här är ett grundläggande exempel att visa.

SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);

Resultat:

1999-03-14 10:35:12.15+10

I det här fallet angav jag ingen tidszon, så den använde den aktuella tidszonen.

Vi kan verifiera returtypen med följande fråga.

SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));

Resultat:

timestamp with time zone

pg_typeof() funktion returnerar datatypen för dess argument, så jag skickade make_timestamptz() som argument.

Ange en tidszon

I det här exemplet anger jag uttryckligen en tidszon.

SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');

Resultat:

1999-03-14 16:35:12.15+10

Här är ett annat exempel, men med olika tidszonvärden.

\x
SELECT 
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACDT'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACST'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACT'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, '+01'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, '-01'),
  make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'NZ');

Resultat (med vertikal utdata):

make_timestamptz | 1999-12-31 23:31:00+10
make_timestamptz | 2000-01-01 00:31:00+10
make_timestamptz | 2000-01-01 15:01:00+10
make_timestamptz | 2000-01-01 09:01:00+10
make_timestamptz | 2000-01-01 11:01:00+10
make_timestamptz | 1999-12-31 21:01:00+10

I det här exemplet använde jag \x för att aktivera utökad visning (även känd som "vertikal utdata") för att göra resultaten lättare att läsa.

Ange \x växlar utökad visning (dvs. den aktiverar och inaktiverar den).

Se Returnera en lista över tidszoner som stöds av PostgreSQL för att få en lista över giltiga tidszoner.

Utanför räckvidd

Om något av argumenten ligger utanför intervallet för de möjliga värdena för dess datumdel, kommer du att få ett "utom intervall"-felet.

SELECT make_timestamptz(1999, 03, 32, 10, 35, 12.15);

Resultat:

ERROR: date field value out of range: 1999-03-32

I det här fallet var dagen 32, vilket är utanför intervallet, så meddelandet förklarade att datumfältets värde var utanför intervallet.

Om endast tidsfältsvärdet ligger utanför intervallet, formuleras felet i enlighet med detta.

SELECT make_timestamptz(1999, 03, 30, 10, 61, 12.15);

Resultat:

ERROR: time field value out of range: 10:61:12.15

I det här fallet minutes argumentet är 61, vilket är utanför intervallet.

Tidsstämpel utan tidszon

För att skapa en tidsstämpel utan tidszon, använd make_timestamp() funktion.


  1. Jämföra databasproxyfeltider - ProxySQL, MaxScale och HAProxy

  2. Databashantering och övervakning för PostgreSQL 12

  3. Valfri INSERT-sats i transaktionskedjan med NodeJS och Postgres

  4. Hur kan jag få fram antalet poster som påverkas av en lagrad procedur?