In PostgreSQL die make_timestamptz()
-Funktion können Sie einen Zeitstempel mit Zeitzone erstellen aus den Feldern für Jahr, Monat, Tag, Stunde, Minute und Sekunde sowie einem optionalen Zeitzonenfeld.
Syntax
Die Funktion hat folgende Syntax:
make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])
Wobei year
, month
, und day
sind Ganzzahlen, die Jahr, Monat und Tag des Datums und hour
ist der Stundenteil, min
ist der Minutenteil und sec
ist der Sekundenteil.
Die Stunde und die Minuten werden als Ganzzahl angegeben , werden die Sekunden mit doppelter Genauigkeit angegeben .
Die optionale timezone
Argument ist für die Zeitzone. Wenn sie nicht angegeben ist, wird die aktuelle Zeitzone verwendet.
Das Ergebnis wird als Zeit mit Zeitzone zurückgegeben .
Beispiel
Hier ist ein einfaches Beispiel zur Veranschaulichung.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);
Ergebnis:
1999-03-14 10:35:12.15+10
In diesem Fall habe ich keine Zeitzone angegeben, also wurde die aktuelle Zeitzone verwendet.
Wir können den Rückgabetyp mit der folgenden Abfrage überprüfen.
SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));
Ergebnis:
timestamp with time zone
Der pg_typeof()
Die Funktion gibt den Datentyp ihres Arguments zurück, also habe ich make_timestamptz()
übergeben als Argument.
Geben Sie eine Zeitzone an
In diesem Beispiel gebe ich ausdrücklich eine Zeitzone an.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');
Ergebnis:
1999-03-14 16:35:12.15+10
Hier ist ein weiteres Beispiel, aber mit verschiedenen Zeitzonenwerten.
\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');
Ergebnis (bei vertikaler Ausgabe):
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 diesem Beispiel habe ich \x
verwendet um eine erweiterte Anzeige (auch „vertikale Ausgabe“ genannt) zu ermöglichen, um die Ergebnisse besser lesbar zu machen.
Eingabe von \x
schaltet die erweiterte Anzeige um (d. h. sie aktiviert und deaktiviert sie).
Siehe Liste der von PostgreSQL unterstützten Zeitzonen zurückgeben, um eine Liste gültiger Zeitzonen zu erhalten.
Außer Reichweite
Wenn eines der Argumente außerhalb des Bereichs der möglichen Werte für seinen Datumsteil liegt, erhalten Sie einen „Out of Range“-Fehler.
SELECT make_timestamptz(1999, 03, 32, 10, 35, 12.15);
Ergebnis:
ERROR: date field value out of range: 1999-03-32
In diesem Fall war der Tag 32, was außerhalb des Bereichs liegt, und daher erklärte die Nachricht, dass der Wert des Datumsfelds außerhalb des Bereichs lag.
Wenn nur der Zeitfeldwert außerhalb des zulässigen Bereichs liegt, wird der Fehler entsprechend formuliert.
SELECT make_timestamptz(1999, 03, 30, 10, 61, 12.15);
Ergebnis:
ERROR: time field value out of range: 10:61:12.15
In diesem Fall die minutes
Argument ist 61, was außerhalb des zulässigen Bereichs liegt.
Zeitstempel ohne Zeitzone
Um einen Zeitstempel ohne Zeitzone zu erstellen, verwenden Sie make_timestamp()
Funktion.