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.