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

Wie to_date() in PostgreSQL funktioniert

In PostgreSQL können Sie to_date() verwenden Funktion zum Konvertieren einer Zeichenfolge in ein Datum.

Syntax

Die Syntax lautet wie folgt:

to_date(text, text)

Wobei das erste Argument eine Zeichenfolgendarstellung des Datums ist und das zweite Argument die Vorlage definiert, die das erste Argument verwendet.

Beispiel

Hier ist ein einfaches Beispiel zur Veranschaulichung.

SELECT to_date('10 Feb 2010', 'DD Mon YYYY');

Ergebnis:

2010-02-10

Vorlagen

Das zweite Argument stellt die Vorlage bereit, in der das erste Argument bereitgestellt wird. Dies wird manchmal als „Formatzeichenfolge“ bezeichnet.

Die Schablone besteht aus einem oder mehreren Schablonenmustern und optional einem oder mehreren Schablonenmustermodifikatoren.

Vorlagenmuster

Unter Verwendung des vorherigen Beispiels DD ist ein Vorlagenmuster und Mon ist ein Schablonenmuster. YYYY ist auch ein Schablonenmuster. Diese wurden alle kombiniert, um die Vorlage zu bilden.

Sie können jedes Vorlagenmuster nach Bedarf verschieben. Und Sie können insgesamt verschiedene Vorlagenmuster verwenden.

Hier sind einige weitere Beispiele, die das gleiche Datum verwenden, aber in unterschiedlichen Formaten (und daher mit unterschiedlichen Vorlagen).

\x
SELECT 
  to_date('10 Feb 2010', 'DD Mon YYYY') AS "DD Mon YYYY",
  to_date('Feb 10 2010', 'Mon DD YYYY') AS "Mon DD YYYY",
  to_date('10/02/2010', 'DD/MM/YYYY') AS "DD/MM/YYYY",
  to_date('02/10/2010', 'MM/DD/YYYY') AS "MM/DD/YYYY",
  to_date('02-10-2010', 'MM-DD-YYYY') AS "MM-DD-YYYY",  
  to_date('02102010', 'MMDDYYYY') AS "MMDDYYYY",
  to_date('02-10-10', 'MM-DD-YY') AS "MM-DD-YY";

Ergebnis (bei vertikaler Ausgabe):

DD Mon YYYY | 2010-02-10
Mon DD YYYY | 2010-02-10
DD/MM/YYYY  | 2010-02-10
MM/DD/YYYY  | 2010-02-10
MM-DD-YYYY  | 2010-02-10
MMDDYYYY    | 2010-02-10
MM-DD-YY    | 2010-02-10

Sie verwenden also alle das gleiche Datum, aber das Datum wird in unterschiedlichen Formaten bereitgestellt. Es ist die Aufgabe der Vorlage, Postgres explizit anzugeben, in welchem ​​Format das Datum bereitgestellt wurde.

Wie Sie sich wahrscheinlich vorstellen können, könnten einige Daten falsch interpretiert werden, wenn wir die Vorlage nicht bereitgestellt haben, insbesondere wenn das Datum ein anderes Gebietsschema für sein Format verwendet.

Beispielsweise könnte der 03.01.2010 je nach Gebietsschema als erster März oder dritter Januar interpretiert werden.

Vorlagenmuster-Modifikatoren

Manchmal müssen Sie der Vorlage möglicherweise auch einen Vorlagenmuster-Modifikator hinzufügen.

Wenn Ihr Datum beispielsweise ein Ordnungszahl-Suffix verwendet, müssen Sie sicherstellen, dass es als solches interpretiert wird.

SELECT 
  to_date('10th Feb 2010', 'DDth Mon YYYY') AS "10th Feb 2010",
  to_date('01st Feb 2010', 'DDth Mon YYYY') AS "01st Feb 2010",
  to_date('03rd Feb 2010', 'DDth Mon YYYY') AS "03rd Feb 2010";

Ergebnis (bei vertikaler Ausgabe):

10th Feb 2010 | 2010-02-10
01st Feb 2010 | 2010-02-01
03rd Feb 2010 | 2010-02-03

Wenn ich den Vorlagenmustermodifikator nicht verwendet hätte, hätte ich bei der Verwendung dieser Daten eine Fehlermeldung erhalten.

Hier ist ein Beispiel zur Veranschaulichung.

SELECT to_date('10th Feb 2010', 'DD Mon YYYY');

Ergebnis:

ERROR: invalid value "th" for "Mon"
DETAIL: The given value did not match any of the allowed values for this field.

Vollständige Liste der Vorlagenmuster und Modifikatoren

Postgres enthält viel mehr Vorlagenmuster und Modifikatoren.

Diese können auch beim Formatieren von Datums-/Uhrzeitwerten verwendet werden (z. B. bei Verwendung von to_char() Funktion zum Konvertieren eines Zeitstempels in einen String).

Eine vollständige Liste finden Sie unter Template Patterns &Modifiers for Date/Time Formatting in PostgreSQL.