web-dev-qa-db-ja.com

Postgresqlで改行と改行を削除する方法は?

すべて、

必要な形式でデータを取得しようとすると、再び行き詰まります。このようなテキストフィールドがあります。

「デアンジェロ001デアンジェロ

名前の由来:イタライン

アメリカ名のデアンジェロから

意味:天使の

感情的なスペクトル•彼はすべての人にとって喜びの泉です。

個人的な誠実さ•彼の良い名前は彼の最も貴重な資産です。性格•七面鳥に囲まれているとき、ワシと一緒に舞い上がるのは難しいです!関係はゆっくりと始まりますが、デアンジェロとの関係は時間とともに構築されます。旅行とレジャー•一生に一度の旅行は彼の未来です。

キャリアとお金•才能豊かな子供、デアンジェロは常に挑戦する必要があります。

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

デアンジェロのラッキーナンバー: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;

事前に感謝、アダム

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

マニュアルを読む http://www.postgresql.org/docs/current/static/functions-matching.html

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

私はpostgres d/bでも同じ問題を抱えていましたが、問題の改行は従来のASCII CRLFではなく、Unicode行区切り文字である文字U2028でした。上記のコードスニペットは、そのユニコードのバリエーションもキャプチャします。

更新...前述の「野生の」キャラクターに出会ったことがありますが、lmichelbacherのアドバイスに従ってさらに翻訳する nicode newline-like 文字、これを使用してください:

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

OPは、改行だけでなく他の多くの文字にも懸念があるように見えるので、正規表現について具体的に尋ねましたが、それらのjust改行を削除したい場合は、正規表現に行く必要さえありません。簡単にできます:

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

これはSQL標準の動作であると思うので、Postgresの最も初期のバージョンを除くすべてにまで拡張する必要があります。上記は9.4および9.2で正常にテストされました

18
SeldomNeedy

文字列の先頭または末尾から改行を削除する必要がある場合、これを使用できます。

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

帽子^は、文字列の始まりとドル記号を意味します$は、文字列の終わりを意味します。

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

7
Bernhar