Zum Inhalt springen

Datumsformatfunktionen

Die Funktionen strftime und strptime können verwendet werden, um zwischen DATE- / TIMESTAMP-Werten und Zeichenketten umzuwandeln. Das ist oft beim Parsen von CSV-Dateien, bei der Ausgabe für Benutzerinnen und Benutzer oder beim Übertragen von Informationen zwischen Programmen erforderlich. Weil es viele mögliche Datumsdarstellungen gibt, nehmen diese Funktionen eine Formatzeichenkette entgegen, die beschreibt, wie das Datum oder der Zeitstempel aufgebaut sein soll.

Beispiele zu strftime

Die Funktion strftime(timestamp, format) wandelt Zeitstempel oder Daten gemäß dem angegebenen Muster in Zeichenketten um.

SELECT strftime(DATE '1992-03-02', '%d/%m/%Y');
02/03/1992
SELECT strftime(TIMESTAMP '1992-03-02 20:32:45', '%A, %-d %B %Y - %I:%M:%S %p');
Monday, 2 March 1992 - 08:32:45 PM

Beispiele zu strptime

Die Funktion strptime(text, format) wandelt Zeichenketten gemäß dem angegebenen Muster in Zeitstempel um.

SELECT strptime('02/03/1992', '%d/%m/%Y');
1992-03-02 00:00:00
SELECT strptime('Monday, 2 March 1992 - 08:32:45 PM', '%A, %-d %B %Y - %I:%M:%S %p');
1992-03-02 20:32:45

Die Funktion strptime wirft bei einem Fehlschlag einen Fehler:

SELECT strptime('02/50/1992', '%d/%m/%Y') AS x;
Terminal window
Invalid Input Error:
Could not parse string "02/50/1992" according to format specifier "%d/%m/%Y"
02/50/1992
^
Error: Month out of range, expected a value between 1 and 12

Um bei einem Fehlschlag NULL zurückzugeben, verwenden Sie die Funktion try_strptime:

NULL

CSV-Parsing

Die Datumsformate können auch beim CSV-Parsing angegeben werden, entweder in der Anweisung COPY oder in der Funktion read_csv. Das geschieht, indem entweder ein DATEFORMAT oder ein TIMESTAMPFORMAT (oder beides) angegeben wird. DATEFORMAT wird zum Umwandeln von Daten verwendet, TIMESTAMPFORMAT zum Umwandeln von Zeitstempeln. Unten einige Beispiele.

In einer COPY-Anweisung:

COPY dates FROM 'test.csv' (DATEFORMAT '%d/%m/%Y', TIMESTAMPFORMAT '%A, %-d %B %Y - %I:%M:%S %p');

In einer Funktion read_csv:

SELECT *
FROM read_csv('test.csv', dateformat = '%m/%d/%Y', timestampformat = '%A, %-d %B %Y - %I:%M:%S %p');

Formatspezifizierer

Unten steht eine vollständige Liste aller verfügbaren Formatspezifizierer.

Spezifizierer Beschreibung Beispiel
%a Abgekürzter Wochentagsname. Sun, Mon, …
%A Vollständiger Wochentagsname. Sunday, Monday, …
%b Abgekürzter Monatsname. Jan, Feb, …, Dec
%B Vollständiger Monatsname. January, February, …
%c ISO-Darstellung von Datum und Uhrzeit 1992-03-02 10:30:20
%d Tag des Monats als nullaufgefüllte Dezimalzahl. 01, 02, …, 31
%-d Tag des Monats als Dezimalzahl. 1, 2, …, 30
%f Mikrosekunde als Dezimalzahl, links nullaufgefüllt. 000000 - 999999
%g Millisekunde als Dezimalzahl, links nullaufgefüllt. 000 - 999
%G ISO-8601-Jahr mit Jahrhundert, das das Jahr darstellt, das den größeren Teil der ISO-Woche enthält (siehe %V). 0001, 0002, …, 2013, 2014, …, 9998, 9999
%H Stunde (24-Stunden-Uhr) als nullaufgefüllte Dezimalzahl. 00, 01, …, 23
%-H Stunde (24-Stunden-Uhr) als Dezimalzahl. 0, 1, …, 23
%I Stunde (12-Stunden-Uhr) als nullaufgefüllte Dezimalzahl. 01, 02, …, 12
%-I Stunde (12-Stunden-Uhr) als Dezimalzahl. 1, 2, … 12
%j Tag des Jahres als nullaufgefüllte Dezimalzahl. 001, 002, …, 366
%-j Tag des Jahres als Dezimalzahl. 1, 2, …, 366
%m Monat als nullaufgefüllte Dezimalzahl. 01, 02, …, 12
%-m Monat als Dezimalzahl. 1, 2, …, 12
%M Minute als nullaufgefüllte Dezimalzahl. 00, 01, …, 59
%-M Minute als Dezimalzahl. 0, 1, …, 59
%n Nanosekunde als Dezimalzahl, links nullaufgefüllt. 000000000 - 999999999
%p AM oder PM der Locale. AM, PM
%S Sekunde als nullaufgefüllte Dezimalzahl. 00, 01, …, 59
%-S Sekunde als Dezimalzahl. 0, 1, …, 59
%u ISO-8601-Wochentag als Dezimalzahl, wobei 1 Montag ist. 1, 2, …, 7
%U Wochennummer des Jahres. Woche 01 beginnt am ersten Sonntag des Jahres, daher kann es Woche 00 geben. Beachten Sie, dass das nicht dem Wochendatumstandard in ISO 8601 entspricht. 00, 01, …, 53
%V ISO-8601-Woche als Dezimalzahl mit Montag als erstem Wochentag. Woche 01 ist die Woche, die den 4. Januar enthält. Beachten Sie, dass %V mit der Jahresdirektive %Y unvereinbar ist. Verwenden Sie stattdessen das ISO-Jahr %G. 01, …, 53
%w Wochentag als Dezimalzahl. 0, 1, …, 6
%W Wochennummer des Jahres. Woche 01 beginnt am ersten Montag des Jahres, daher kann es Woche 00 geben. Beachten Sie, dass das nicht dem Wochendatumstandard in ISO 8601 entspricht. 00, 01, …, 53
%x ISO-Datumsdarstellung 1992-03-02
%X ISO-Zeitdarstellung 10:30:20
%y Jahr ohne Jahrhundert als nullaufgefüllte Dezimalzahl. Die Zahlen 00 bis 68 werden zu 2000 bis 2068. Die Zahlen 69 bis 99 werden zu 1969 bis 1999. 00, 01, …, 99
%-y Jahr ohne Jahrhundert als Dezimalzahl. Die Zahlen 0 bis 68 werden zu 2000 bis 2068. Die Zahlen 69 bis 99 werden zu 1969 bis 1999. 0, 1, …, 99
%Y Jahr mit Jahrhundert als Dezimalzahl. 2013, 2019 usw.
%z Zeitverschiebung zu UTC in der Form ±HH:MM, ±HHMM oder ±HH. -0700
%Z Name der Zeitzone. Europe/Amsterdam
%% Ein literales %-Zeichen. %