2016-04-05 23 views
0

So habe ich eine Spalte, incarceration_date, das ist eigentlich ein Textfeld und ich möchte es als Datum zu werfen. Normalerweise kein Problem, aber es scheint, dass jeder Wert in dieser Spalte ein Leerzeichen (& # 160) am Ende hat, das natürlich den Datumsfunktionsfehler macht.Wie entferne ich Leerzeichen aus einer Zeichenfolge in PostgreSQL?

Ich habe zwei verschiedene Ansätze für dieses Problem ohne Erfolg ausprobiert.

Versuch 1:

trim(both chr(65279) from incarceration_date)::DATE 

Versuch 2:

regexp_replace(incarceration_date, '\s+$', '')::DATE 

Ich denke, der zweite Versuch fehlschlägt, weil [[: space:]] nicht Null Breite Raum ohne Pause enthält.

In dieser speziellen Instanz haben die Felder alle die gleiche Breite, so dass ich dieses Problem umgehen kann, indem ich nur die ersten zehn Zeichen an die Datumsfunktion übergebe. Ich habe jedoch einige allgemeine Textreinigungsfunktionen, die ich für importierte Daten verwende, und ich möchte, dass sie mit diesem Zeichen umgehen können.

Eine Probe String sieht wie folgt aus:

"06/17/2011 " 

Aber ich bin mir nicht sicher, dass das Problem Charakter Kopien SO richtig.

Ich benutze PostgreSQL-9.5.0.

der Ausgang einer Zeile der incarceration_date Spaltenausgangs durch encode (incarceration_date :: bytea 'hex') ist:

30362f31372f32303131c2a0 

Alle Zeilen mit c2a0 beenden.

Die Servercodierung ist UTF8.

+1

Sie könnten alles außer '[0-9 /]' aus der Zeichenkette entfernen – ThiefMaster

+0

Können Sie das Beispielergebnis von 'encode (incarceration_date :: bytea, 'hex')' '? Stellen Sie auch die Kodierung Ihrer Datenbank zur Verfügung ('show server_encoding;') – Abelisto

+0

@Abelisto Ich habe diese Information zu der Frage hinzugefügt. –

Antwort

0

Wie @ThiefMaster angegeben, sind Sie wahrscheinlich besser dran zu entfernen etwas andere als Ziffern und Schrägstriche, nur für den Fall, dass Sie anderen Müll auf dem Gebiet:

regexp_replace(incarceration_date, '[0-9/]', '')::DATE 

Alternativ für die Leistung, wenn Sie wissen, dass das Datum immer wie DD/MM/YYYY, dann just use left(incarceration_date, 10) oder sogar incarceration_date::char(10) formatiert wird.

Verwandte Themen