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.