In PostgreSQL der make_timestamp()
Mit der Funktion können Sie aus den Feldern für Jahr, Monat, Tag, Stunde, Minute und Sekunde einen Zeitstempel erstellen.
Syntax
Die Funktion hat folgende Syntax:
make_timestamp(year int, month int, day int, hour int, min int, sec double precision)
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 .
Das Ergebnis wird als Zeitstempel zurückgegeben . Genauer gesagt wird es als Zeit ohne Zeitzone zurückgegeben .
Beispiel
Hier ist ein einfaches Beispiel zur Veranschaulichung.
SELECT make_timestamp(2020, 10, 25, 9, 30, 17.12);
Ergebnis:
2020-10-25 09:30:17.12
Und wir können den Rückgabetyp mit der folgenden Abfrage überprüfen.
SELECT pg_typeof(make_timestamp(2020, 10, 25, 9, 30, 17.12));
Ergebnis:
timestamp without time zone
Der pg_typeof()
Die Funktion gibt den Datentyp ihres Arguments zurück, also habe ich make_timestamp()
übergeben als Argument..
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_timestamp(2020, 13, 25, 9, 30, 17.12);
Ergebnis:
ERROR: date field value out of range: 2020-13-25
In diesem Fall lag der Monat außerhalb des zulässigen Bereichs, weshalb die Meldung erklärte, dass der Wert des Datumsfelds außerhalb des zulässigen Bereichs lag.
Wenn nur der Zeitfeldwert außerhalb des zulässigen Bereichs liegt, wird der Fehler entsprechend formuliert.
SELECT make_timestamp(2020, 10, 25, 25, 30, 17.12);
Ergebnis:
ERROR: time field value out of range: 25:30:17.12
Strings als Argumente übergeben
Die Postgres-Dokumentation besagt, dass die Argumente Ganzzahlen sein müssen (und im Fall von seconds
Argument), aber das Übergeben von Zeichenfolgen funktioniert auch (wahrscheinlich, weil sie implizit in Ganzzahlen konvertiert werden), solange jedes Argument innerhalb seines richtigen Bereichs liegt.
SELECT make_timestamp('2020', '12', '25', '10', '30', '17.12');
Ergebnis:
2020-12-25 10:30:17.12
Wieder können wir pg_type()
verwenden um den resultierenden Datentyp zu überprüfen.
SELECT pg_typeof(make_timestamp('2020', '12', '25', '10', '30', '17.12'));
Ergebnis:
timestamp without time zone
Sie müssen jedoch immer noch sicherstellen, dass jedes Argument gültig ist, sobald es in eine Ganzzahl umgewandelt wurde, andernfalls erhalten Sie eine Fehlermeldung.
SELECT pg_typeof(make_timestamp('2020', '13', '25', '10', '30', '17.12'));
Ergebnis:
ERROR: date field value out of range: 2020-13-25
Zeitstempel mit Zeitzone
So erstellen Sie einen Zeitstempel mit Zeitzone verwenden Sie make_timestamptz()
Funktion.