2016-04-05 6 views
0

私は実際にはテキストフィールドであるincarceration_dateという列を持っており、それを日付としてキャストしたいと考えています。通常問題はありませんが、この列のすべての値は、最後にno-breakスペース(&#160)があり、当然のことながら日付関数のエラーとなります。PostgreSQLの文字列から改行なしスペースを削除するにはどうすればよいですか?

私は成功しなければこの問題に対して2つの異なるアプローチを試しました。

試み1:

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

試み2:[:スペース:] []ゼロ幅ノーブレークスペースが含まれていません

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

私がため、2番目の試みが失敗したと思います。

フィールドはすべて同じ幅であるため、最初の10文字を日付関数に渡すだけでこの問題を回避できます。しかし、インポートしたデータに使用する一般的なテキストクリーニング機能があり、この文字を処理できるようにしたいと考えています。

サンプル文字列は次のようになります。

"06/17/2011 " 

しかし、私は、問題の文字をコピーするSO正しくことはよく分かりません。

私はPostgreSQL-9.5.0を使用しています。

エンコード介してincarceration_date列出力の1行分の出力(incarceration_date :: bytea型、 '六角')がある:

30362f31372f32303131c2a0 

すべての行がc2a0で終わります。

サーバーエンコーディングはUTF8です。

+1

文字列 – ThiefMaster

+0

から '[0-9 /]'以外を削除することができます 'encode(incarceration_date :: bytea、 'hex')'のサンプル結果を提供できますか?また、あなたのデータベースのエンコーディングを提供してください( 'show server_encoding;') – Abelisto

+0

@Abelisto私は質問にその情報を追加しました。 –

答えて

0

@ThiefMasterが述べたように、あなたはあなたがフィールド内の他のごみ持って念のために、おそらく数字とスラッシュ以外他何かを削除する方がいいでしょう:場合、パフォーマンスのために、また

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

を日付は常にDD/MM/YYYY、次にjust use left(incarceration_date, 10)、またはincarceration_date::char(10)のように書式設定されます。

関連する問題