it-swarm-id.com

Bagaimana cara menghapus carriage return dan baris baru di Postgresql?

Semua,

Saya terjebak lagi mencoba untuk mendapatkan data saya dalam format yang saya butuhkan. Saya memiliki bidang teks yang terlihat seperti ini.

"deangelo 001 deangelo

lokal Asal nama: italain

dari nama Amerika deangelo

artinya: para malaikat

spektrum emosional • dia adalah sumber kegembiraan bagi semua.

integritas pribadi • nama baiknya adalah asetnya yang paling berharga. kepribadian • sulit untuk terbang dengan elang ketika Anda dikelilingi oleh kalkun! hubungan • dimulai perlahan, tetapi hubungan dengan deangelo berkembang seiring waktu. travel & leisure • perjalanan seumur hidup ada di masa depannya.

karier & uang • anak berbakat, deangelo harus ditantang terus-menerus.

peluang hidup • sukacita dan kebahagiaan menunggu orang yang diberkati ini.

angka keberuntungan deangelo: 12 • 38 • 18 • 34 • 29 • 16

"

Apa cara terbaik di Postgresql untuk menghapus carriage return dan baris baru? Saya sudah mencoba beberapa hal dan tidak ada yang mau berperilaku.

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;

Terima kasih sebelumnya, Adam

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

baca manual http://www.postgresql.org/docs/current/static/functions-matching.html

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

Saya memiliki masalah yang sama di postgres saya d/b, tetapi baris baru yang dimaksud bukan CRLF ascii tradisional, itu adalah pemisah baris unicode, karakter U2028. Cuplikan kode di atas akan menangkap variasi unicode itu juga.

Perbarui ... walaupun saya hanya pernah menemukan karakter yang disebutkan di atas "di alam liar", untuk mengikuti saran lmichelbacher untuk menerjemahkan lebih banyak --- seperti kode baris unicode karakter, gunakan ini:

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

OP bertanya secara spesifik tentang regex karena akan muncul ada kekhawatiran untuk sejumlah karakter lain serta baris baru, tetapi bagi mereka hanya ingin menghapus baris baru, Anda bahkan tidak perlu pergi ke regex. Anda cukup melakukannya:

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

Saya pikir ini adalah perilaku standar SQL, jadi harus diperluas kembali ke semua tapi mungkin versi paling awal dari Postgres. Denda di atas diuji untuk saya dalam 9,4 dan 9,2

18
SeldomNeedy

Jika Anda perlu menghapus jeda baris dari awal atau akhir string, Anda dapat menggunakan ini:

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

Perlu diingat bahwa topi ^ berarti awal dari string dan tanda dolar $ berarti akhir dari string.

Semoga ini bisa membantu seseorang.

7
Bernhar