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

Hvordan make_timestamptz() virker i PostgreSQL

I PostgreSQL er make_timestamptz() funktionen giver dig mulighed for at oprette et tidsstempel med tidszone fra felterne år, måned, dag, time, minutter og sekunder samt et valgfrit tidszonefelt.

Syntaks

Funktionen har følgende syntaks:

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

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 .

Den valgfri timezone argumentet er for tidszonen. Hvis det ikke er angivet, bruges den aktuelle tidszone.

Resultatet returneres som et tidspunkt med tidszone .

Eksempel

Her er et grundlæggende eksempel at demonstrere.

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

Resultat:

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

I dette tilfælde angav jeg ikke en tidszone, så den brugte den aktuelle tidszone.

Vi kan bekræfte returtypen med følgende forespørgsel.

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

Resultat:

timestamp with time zone

pg_typeof() funktion returnerer datatypen for dets argument, og så jeg sendte make_timestamptz() som argumentet.

Angiv en tidszone

I dette eksempel angiver jeg eksplicit en tidszone.

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

Resultat:

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

Her er et andet eksempel, men med forskellige tidszoneværdier.

\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 (ved hjælp af lodret output):

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 dette eksempel brugte jeg \x for at aktivere udvidet visning (også kendt som "lodret output") for at gøre resultaterne nemmere at læse.

Indtastning af \x skifter udvidet visning (dvs. den aktiverer og deaktiverer den).

Se Returner en liste over tidszoner understøttet af PostgreSQL for at få en liste over gyldige tidszoner.

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_timestamptz(1999, 03, 32, 10, 35, 12.15);

Resultat:

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

I dette tilfælde var dagen 32, hvilket er uden for intervallet, og så forklarede meddelelsen, 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_timestamptz(1999, 03, 30, 10, 61, 12.15);

Resultat:

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

I dette tilfælde minutes argumentet er 61, hvilket er uden for rækkevidde.

Tidsstempel uden tidszone

For at oprette et tidsstempel uden en tidszone, brug make_timestamp() funktion.


  1. Integration af værktøjer til at administrere PostgreSQL i produktion

  2. Oracle Case Statement forklaret med tips og eksempler

  3. Fjern dublerede rækker i en tabel

  4. Kan ikke formindske 'skrivebeskyttet' database | Formindsk transaktionslog, mens du bruger AlwaysOn Availability Group