In PostgreSQL, de make_timestamptz()
functie stelt u in staat om een tijdstempel met tijdzone te maken uit de velden jaar, maand, dag, uur, minuten en seconden, evenals een optioneel tijdzoneveld.
Syntaxis
De functie heeft de volgende syntaxis:
make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])
Waar year
, month
, en day
zijn gehele getallen die het jaar, de maand en de dag van de datum vertegenwoordigen, en hour
is het uurgedeelte, min
is het minutengedeelte, en sec
is het tweede deel.
Het uur en de minuten worden weergegeven als een geheel getal , de seconden worden geleverd als dubbele precisie .
De optionele timezone
argument is voor de tijdzone. Als het niet is opgegeven, wordt de huidige tijdzone gebruikt.
Het resultaat wordt geretourneerd als een tijd met tijdzone .
Voorbeeld
Hier is een eenvoudig voorbeeld om te demonstreren.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);
Resultaat:
1999-03-14 10:35:12.15+10
In dit geval heb ik geen tijdzone opgegeven, dus de huidige tijdzone gebruikt.
We kunnen het retourtype verifiëren met de volgende vraag.
SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));
Resultaat:
timestamp with time zone
De pg_typeof()
functie retourneert het gegevenstype van zijn argument, en dus heb ik make_timestamptz()
. doorgegeven als het argument.
Geef een tijdzone op
In dit voorbeeld geef ik expliciet een tijdzone op.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');
Resultaat:
1999-03-14 16:35:12.15+10
Hier is nog een voorbeeld, maar met verschillende tijdzonewaarden.
\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');
Resultaat (met verticale uitvoer):
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
In dit voorbeeld gebruikte ik \x
om uitgebreide weergave in te schakelen (ook bekend als "verticale uitvoer") om de resultaten beter leesbaar te maken.
\x
. invoeren schakelt tussen uitgebreide weergave (d.w.z. het schakelt het in en uit).
Zie Een lijst met door PostgreSQL ondersteunde tijdzones retourneren voor een lijst met geldige tijdzones.
Buiten bereik
Als een van de argumenten buiten het bereik van de mogelijke waarden voor het datumgedeelte valt, krijgt u de foutmelding 'buiten bereik'.
SELECT make_timestamptz(1999, 03, 32, 10, 35, 12.15);
Resultaat:
ERROR: date field value out of range: 1999-03-32
In dit geval was de dag 32, wat buiten bereik is, en dus legde het bericht uit dat de waarde van het datumveld buiten bereik was.
Als alleen de waarde van het tijdveld buiten het bereik valt, wordt de fout dienovereenkomstig geformuleerd.
SELECT make_timestamptz(1999, 03, 30, 10, 61, 12.15);
Resultaat:
ERROR: time field value out of range: 10:61:12.15
In dit geval de minutes
argument is 61, wat buiten bereik is.
Tijdstempel zonder tijdzone
Gebruik de make_timestamp()
. om een tijdstempel zonder tijdzone te maken functie.