すべて、
必要な形式でデータを取得しようとすると、再び行き詰まります。このようなテキストフィールドがあります。
「デアンジェロ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;
事前に感謝、アダム
select regexp_replace(field, E'[\\n\\r]+', ' ', 'g' )
マニュアルを読む http://www.postgresql.org/docs/current/static/functions-matching.html
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' )
OPは、改行だけでなく他の多くの文字にも懸念があるように見えるので、正規表現について具体的に尋ねましたが、それらのjust改行を削除したい場合は、正規表現に行く必要さえありません。簡単にできます:
select replace(field,E'\n','');
これはSQL標準の動作であると思うので、Postgresの最も初期のバージョンを除くすべてにまで拡張する必要があります。上記は9.4および9.2で正常にテストされました
文字列の先頭または末尾から改行を削除する必要がある場合、これを使用できます。
UPDATE table
SET field = regexp_replace(field, E'(^[\\n\\r]+)|([\\n\\r]+$)', '', 'g' );
帽子^
は、文字列の始まりとドル記号を意味します$
は、文字列の終わりを意味します。
それが誰かを助けることを願っています。