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

Funktionsweise von make_timestamptz() in PostgreSQL

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.