sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur make_timestamp() fungerar i PostgreSQL

I PostgreSQL, make_timestamp() Med funktionen kan du skapa en tidsstämpel från dess fält för år, månad, dag, timme, minut och sekunder.

Syntax

Funktionen har följande syntax:

make_timestamp(year int, month int, day int, hour int, min int, sec double precision)

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 .

Resultatet returneras som en tidsstämpel . Mer exakt, det returneras som tid utan tidszon .

Exempel

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

SELECT make_timestamp(2020, 10, 25, 9, 30, 17.12);

Resultat:

2020-10-25 09:30:17.12

Och vi kan verifiera returtypen med följande fråga.

SELECT pg_typeof(make_timestamp(2020, 10, 25, 9, 30, 17.12));

Resultat:

timestamp without time zone

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

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 "utanför intervallet"-felet.

SELECT make_timestamp(2020, 13, 25, 9, 30, 17.12);

Resultat:

ERROR: date field value out of range: 2020-13-25

I det här fallet var månaden 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_timestamp(2020, 10, 25, 25, 30, 17.12);

Resultat:

ERROR: time field value out of range: 25:30:17.12

Att skicka strängar som argument

Postgres-dokumentationen anger att argumenten måste vara heltal (och dubbel precision när det gäller seconds argument), men att skicka strängar fungerar också (förmodligen för att de implicit omvandlas till heltal), så länge som varje argument är inom sitt rätta intervall.

SELECT make_timestamp('2020', '12', '25', '10', '30', '17.12');

Resultat:

2020-12-25 10:30:17.12

Återigen kan vi använda pg_type() för att kontrollera den resulterande datatypen.

SELECT pg_typeof(make_timestamp('2020', '12', '25', '10', '30', '17.12'));

Resultat:

timestamp without time zone

Du måste dock fortfarande se till att varje argument är giltigt när det konverterats till ett heltal, annars får du ett felmeddelande.

SELECT pg_typeof(make_timestamp('2020', '13', '25', '10', '30', '17.12'));

Resultat:

ERROR: date field value out of range: 2020-13-25

Tidsstämpel med tidszon

För att skapa en tidsstämpel med tidszon värde, använd make_timestamptz() funktion.


  1. Lägg till en beräknad kolumn till en befintlig tabell i SQL Server

  2. Hur man lägger till dagar till ett datum i MySQL

  3. Hur man kör en lagrad procedur i C#-programmet

  4. ORA-24550:signal mottagen:[si_signo=6] fel