PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Funktionsweise von make_timestamp() in PostgreSQL

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.