I PostgreSQL er make_timestamp()
funktionen giver dig mulighed for at oprette et tidsstempel fra felterne år, måned, dag, time, minutter og sekunder.
Syntaks
Funktionen har følgende syntaks:
make_timestamp(year int, month int, day int, hour int, min int, sec double precision)
Hvor year
, month
og day
er heltal, der repræsenterer året, måneden og dagen for datoen og hour
er timedelen, min
er minutterdelen og sec
er sekunddelen.
Time og minutter er angivet som et heltal , sekunderne leveres som dobbelt præcision .
Resultatet returneres som et tidsstempel . Mere præcist returneres det som tid uden tidszone .
Eksempel
Her er et grundlæggende eksempel at demonstrere.
SELECT make_timestamp(2020, 10, 25, 9, 30, 17.12);
Resultat:
2020-10-25 09:30:17.12
Og vi kan bekræfte returtypen med følgende forespørgsel.
SELECT pg_typeof(make_timestamp(2020, 10, 25, 9, 30, 17.12));
Resultat:
timestamp without time zone
pg_typeof()
funktion returnerer datatypen for dets argument, og så jeg sendte make_timestamp()
som argumentet..
Udenfor rækkevidde
Hvis nogen af argumenterne er uden for rækkevidden af de mulige værdier for dens datodel, får du fejlen "uden for område".
SELECT make_timestamp(2020, 13, 25, 9, 30, 17.12);
Resultat:
ERROR: date field value out of range: 2020-13-25
I dette tilfælde var måneden uden for intervallet, så meddelelsen forklarede, at datofeltets værdi var uden for intervallet.
Hvis kun tidsfeltets værdi er uden for området, er fejlen formuleret i overensstemmelse hermed.
SELECT make_timestamp(2020, 10, 25, 25, 30, 17.12);
Resultat:
ERROR: time field value out of range: 25:30:17.12
At sende strenge som argumenter
Postgres-dokumentationen angiver, at argumenterne skal være heltal (og dobbelt præcision i tilfælde af seconds
argument), men videregivelse af strenge virker også (sandsynligvis fordi de implicit konverteres til heltal), så længe hvert argument er inden for dets rette område.
SELECT make_timestamp('2020', '12', '25', '10', '30', '17.12');
Resultat:
2020-12-25 10:30:17.12
Igen kan vi bruge pg_type()
for at kontrollere den resulterende datatype.
SELECT pg_typeof(make_timestamp('2020', '12', '25', '10', '30', '17.12'));
Resultat:
timestamp without time zone
Du skal dog stadig sikre dig, at hvert argument er gyldigt, når det først er konverteret til et heltal, ellers får du en fejl.
SELECT pg_typeof(make_timestamp('2020', '13', '25', '10', '30', '17.12'));
Resultat:
ERROR: date field value out of range: 2020-13-25
Tidsstempel med tidszone
For at oprette et tidsstempel med tidszone værdi, skal du bruge make_timestamptz()
funktion.