sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan make_timestamp() virker i PostgreSQL

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.


  1. Nulstil root-adgangskoden til MySQL

  2. Sådan opretter du den linkede server til SQL Server 2008, hvor vi har databasen fra 2000 og 2005

  3. Slut med eliminering:Når SQL Server fjerner unødvendige tabeller

  4. How Now() virker i PostgreSQL