2011-10-20 11 views
41

すべて、PostgreSQLでキャリッジリターンと改行を削除するには?

私は必要なフォーマットでデータを取得しようとしています。このようなテキストフィールドがあります。

「名前の001 deangelo

ローカルの原点をdeangelo:

italainアメリカの名deangeloから

意味:天使の

感情的なスペクトル彼はの泉である•

個人的な完全性•彼の良い名前は彼のモスです。貴重な財産です。 人格• シチメンチョウに囲まれていると、ワシの飛び火は難しいです!関係はゆっくりと始まりますが、 deangeloとの関係は時間が経つにつれて増加します。旅行&余暇•生涯の旅行 は彼の将来です。

キャリア&お金•才能のある子供、deangeloは常に に挑戦する必要があります。

人生の機会•喜びと幸福はこの祝福された人を待っています。

deangeloの幸運の数字:12•38•18•34•29•16

最良の方法は、私がきたキャリッジリターンと改行を削除するにはPostgreSQLのでしょうか?いくつかのことを試してみましたが、それらのどれも動作するようにしたいん。事前に

select regexp_replace(field, E'\r\c', ' ', 'g') from mytable 
    WHERE id = 5520805582 

SELECT regexp_replace(field, E'[^\(\)\&\/,;\*\:.\>\<[:space:]a-zA-Z0-9-]', ' ') 
    FROM mytable 
    WHERE field~ E'[^\(\)\&\/,;\*\:.\<\>[:space:]a-zA-Z0-9-]' 
    AND id = 5520805582; 

おかげで、 アダム

答えて

97
select regexp_replace(field, E'[\\n\\r]+', ' ', 'g') 

は私が/ B dは、私はpostgresで同じ問題を抱えていたが、問題の改行は、伝統的なアスキーCRLFなかったマニュアルhttp://www.postgresql.org/docs/current/static/functions-matching.html

+14

'E '接頭辞を削除した場合、二重スラッシュを取り除くことができます:' [\ n \ r] +' '。もっときれいに見える、イモ。 – jpmc26

+1

'g'フラグは何をしますか?マニュアルには説明されていません... – Jens

+0

リンクされたドキュメントには、次のテキストが含まれています。 '' ' flagsパラメータは、機能の動作を変更する0文字以上の単一文字フラグを含むオプションのテキスト文字列です。フラグiは大文字と小文字を区別しないマッチングを指定し、フラグgは最初のものだけでなく一致する各部分文字列の置換を指定します。サポートされているフラグ(gではありません)については、表9-20で説明します。 '' ' – valgog

25
select regexp_replace(field, E'[\\n\\r\\u2028]+', ' ', 'g') 

を読んで、それはUnicodeの行区切り、文字U2028ました。上記のコードスニペットは、そのユニコードのバリエーションも取得します。

更新...私は今まで、「野生の」とは、上記の文字に遭遇してきたものの、これを使用して、さらに多くのunicode newline-like文字を変換するためにlmichelbacherのアドバイスに従うこと:

select regexp_replace(field, E'[\\n\\r\\f\\u000B\\u0085\\u2028\\u2029]+', ' ', 'g') 
+1

他の「改行-y」Unicode文字をその正規表現に追加することもできます:http://en.wikipedia.org/wiki/Newline#Unicode – lmichelbacher

10

OPは、特に尋ね正規表現については、改行だけでなく、他の文字の数にも関心があるように見えるので、の場合はに改行を追加したいので、正規表現に行く必要はありません。あなたは、単に行うことができます。

select replace(field,E'\n',''); 

私はそれがすべてに遡るが、Postgresのの、おそらく非常に最初のバージョン必要がありますので、これは、SQL-標準的な動作であると思います。上記の作業を開始するか、文字列の末尾から改行を削除する必要がある場合には9.4と9.2

5

で私のために罰金テスト、あなたはこれを使用することがあります。

UPDATE table 
SET field = regexp_replace(field, E'(^[\\n\\r]+)|([\\n\\r]+$)', '', 'g'); 

が考えていること、帽子 ^は、文字列の先頭とドル記号を意味します。 $は、文字列の最後を意味します。

誰かを助けることを願っています。

関連する問題