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

How to_timestamp() Funktioniert in PostgreSQL

Laut der PostgreSQL-Dokumentation gibt es zwei Funktionen namens to_timestamp() :

  • Man wandelt die Unix-Epoche in einen Zeitstempel um. Die Unix-Epoche ist die Anzahl der Sekunden seit dem 01.01.1970 00:00:00+00.
  • Der andere wandelt einen String in einen Zeitstempel um.

Genauer gesagt konvertiert jede Funktion den Wert in einen Zeitstempel mit Zeitzone Wert.

Obwohl die Postgres-Dokumentation sie als zwei separate to_timestamp() darstellt Funktionen stelle ich sie so dar, als wären sie eine Funktion, die entweder ein Argument oder zwei akzeptiert.

Syntax

Sie können to_timestamp() verwenden wie folgt:

to_timestamp(double precision)
to_timestamp(text, text)

Bei der ersten Syntax wird das Argument als doppelte Genauigkeit angegeben -Wert, und es ist der Epochenwert mit doppelter Genauigkeit, den Sie in einen Zeitstempel konvertieren möchten.

Bei der zweiten Syntax ist das erste Argument das Datum und das zweite Argument die Formatzeichenfolge.

Konvertiere die Unix-Epoche

Hier ist ein einfaches Beispiel, um zu demonstrieren, wie man die Epoche in einen Zeitstempel umwandelt.

SELECT to_timestamp(1658792421);

Ergebnis:

2022-07-26 09:40:21+10

In meinem Fall ist der Zeitzonen-Offset +10 und das wird zurückgegeben.

Sekundenbruchteile

Hier ist ein Beispiel mit Sekundenbruchteilen.

SELECT to_timestamp(1658792421.123456);

Ergebnis:

2022-07-26 09:40:21.123456+10

Formatierung

Hier ist ein Beispiel für die Verwendung der zweiten Syntax zum Formatieren eines Datumswerts.

SELECT to_timestamp('21 Oct 2022', 'DD Mon YYYY');

Ergebnis:

2022-10-21 00:00:00+10

Das zweite Argument wird bereitgestellt, um anzugeben, wie das erste Argument formatiert ist.

Hier ist ein weiteres Format, um diesen Punkt weiter zu veranschaulichen.

SELECT to_timestamp('21/10/2022', 'DD/MM/YYYY');

Ergebnis:

2022-10-21 00:00:00+10

Wenn das Format des zweiten Arguments nicht mit dem Format des ersten Arguments übereinstimmt, erhalten Sie möglicherweise einen Fehler.

Zum Beispiel:

SELECT to_timestamp('21 October 2022', 'DD Mon YYYY');

Ergebnis:

ERROR: invalid value "ober" for "YYYY"
DETAIL: Value must be an integer.

Die Formatzeichenfolge (zweites Argument) kann ein beliebiges Vorlagenmuster mit einem optionalen Modifikator sein.

Hier ist eine vollständige Liste der Vorlagenmuster und Modifikatoren, die Sie mit dieser Funktion verwenden können.

Der Rückgabetyp

Wie bereits erwähnt, ist der Rückgabetyp Zeitstempel mit Zeitzone . Wir können dies mit pg_typeof() überprüfen Funktion.

SELECT pg_typeof(to_timestamp(1658792421.123456));

Ergebnis:

timestamp with time zone

Datumsteile extrahieren

Sie können verschiedene Methoden verwenden, um Datumsteile aus dem Zeitstempelwert zu extrahieren.

Sie können zum Beispiel extract() verwenden Funktion.

SELECT extract('month' from to_timestamp(1658792421));

Ergebnis:

7

Und Sie können to_char() verwenden Funktion, wenn Sie z. B. den Monatsnamen anstelle der Monatsnummer anzeigen müssen.

SELECT to_char(to_timestamp(1658792421), 'Month');

Ergebnis:

July

Und hier wird die Formatierungssyntax verwendet.

SELECT to_char(to_timestamp('1st Oct 2022', 'FMDDth Mon YYYY'), 'Month');

Ergebnis:

October

Wenn Sie nur die Monatsnummer haben, können Sie das folgende Beispiel verwenden, um die Monatsnummer in den Monatsnamen umzuwandeln.

SELECT to_char(to_timestamp(3::text, 'MM'), 'Month');

Ergebnis:

March

Und umgekehrt (Monatsnamen in Monatsnummer umwandeln).

Im folgenden Beispiel extrahiere ich die Monatszahl mit date_part() als Alternative zu extract() .

SELECT date_part('month', (to_timestamp('Mar 2022', 'Mon')));

Ergebnis:

3