Wie konvertieren von Datums-Zeichenketten zu timestamp, ohne zu wissen, das Datum-format
Ich versuche eine Abfrage schreiben, fügen einen Wert in eine timestamp with no timezone data
- Typ-Feld. Der Wert kommt aus einer CSV-Datei.
Die version mit der ich arbeite, ist PostgreSQL 8.1.21.
Die CSV-Datei-upload erfolgt durch den Kunden und es hat eine Spalte Datum. Das Datum kommt manchmal als '28-Sep-13'
und manchmal als '28/09/2013'
Formate.
Ich versuchte, verwenden Sie die folgende Besetzung der string in timestamp:
str_date::timestamp
.
Dies funktioniert gut, wenn str_date
ist so etwas wie '28-Sep-13'
aber es wird nicht funktionieren, wenn das eingehende Datum hat das format '28/09/2013'
, wenn dieser Fehler Auftritt:
ERROR: date/time field value out of range: "28/09/2013" HINT: Perhaps you need a different "datestyle" setting
Grundsätzlich der AUFTRAGGEBER verwahrt das ändern der Datum-format in der hochgeladenen CSV-Datei.
Gibt es eine Möglichkeit, konvertieren Sie die Datums-String in ein timestamp-je nach Ihrer tatsächlichen format?
Wie schön von Euch zu verwenden, meinem Geburtstag als ein Beispiel 😉
InformationsquelleAutor Shiver | 2011-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie Ihre datestyle "ISO, DMY". Es ist auf "ISO, MDY" standardmäßig, und verursachen würde, Ihrem Beispiel zu scheitern:
(Beispiele erfolgt in PostgreSQL 9.1, aber die DateStyle-Einstellung und Verhalten verbunden sind uralt, so sollte funktionieren)
Freut mich zu hören das problem behoben. Wenn du so freundlich, markieren Sie die Antwort akzeptiert, wäre es zu schätzen!
InformationsquelleAutor Matthew Wood
Umgehen kannst du das problem mit diesen Schritten:
Erstellen Sie eine leere temporäre Tabelle mit der gleichen Struktur wie die Ziel-Tabelle:
Ändern Sie die Typ der problematischen Spalte zu text:
Import Daten in die temp Tabelle. Sollte funktionieren jetzt:
INSERT
in die Ziel-Tabelle je nach je nach dem tatsächlichen Inhalt der Spalte:InformationsquelleAutor Erwin Brandstetter
Stimme ich mit Erwin, aber ich würde versuchen, erstellen Funktion in der Datenbank (PL/pgSQL, PL/Python oder andere Sprache) , kann das konvertieren verschiedener Datums-Zeichenketten in
date
. In Erwins Antwort, die Sie sehen könnenWHEN ... THEN
und Sie können es verwenden,. Eine solche Funktion wird es leichter zu testen und zu warten.InformationsquelleAutor Michał Niklas