Saya ingin mengganti (atau menghapus) karakter baris baru dalam string TSQL. Ada Ide?
Yang jelas
REPLACE(@string, CHAR(13), '')
tidak akan melakukannya ...
Sebenarnya baris baru dalam perintah SQL atau string skrip dapat berupa CR, LF atau CR + LF. Untuk mendapatkan semuanya, Anda perlu sesuatu seperti ini:
SELECT REPLACE(REPLACE(@str, CHAR(13), ''), CHAR(10), '')
.columns[0]
.sumber
Saya mungkin terlambat satu tahun ke pesta, tapi saya mengerjakan pertanyaan & MS-SQL setiap hari, dan saya bosan dengan fungsi bawaan LTRIM () & RTRIM () (dan selalu harus memanggil mereka bersama-sama), dan tidak menangkap data 'kotor' yang memiliki baris baru di akhir, jadi saya memutuskan sudah saatnya menerapkan fungsi TRIM yang lebih baik. Saya akan menyambut umpan balik rekan!
Penafian : ini benar-benar menghapus (menggantikan dengan spasi tunggal) memperluas bentuk spasi putih (tab, umpan baris, carriage-return, dll.), Jadi ini telah diganti namanya menjadi "CleanAndTrim" dari jawaban asli saya. Idenya di sini adalah bahwa string Anda tidak memerlukan karakter spasi khusus ekstra di dalamnya, dan jadi jika mereka tidak muncul di kepala / ekor, mereka harus diganti dengan ruang kosong. Jika Anda sengaja menyimpan karakter tersebut di string (katakanlah, kolom data yang akan Anda jalankan), JANGAN MELAKUKANNYA! Perbaiki fungsi ini atau tulis karakter Anda sendiri yang benar-benar hanya menghilangkan karakter-karakter tersebut dari titik akhir string, bukan dari 'tubuh'.
Oke, sekarang setelah disclaimer diperbarui, ini kodenya.
Bersulang!
Penafian lain : Line-break Windows khas Anda adalah CR + LF, jadi jika string Anda berisi itu, Anda akhirnya akan menggantinya dengan spasi "ganda".
UPDATE, 2016 : Versi baru yang memberi Anda opsi untuk mengganti karakter spasi khusus dengankarakter lain pilihan Anda! Ini juga termasuk komentar dan penyelesaian untuk pasangan Windows CR + LF, yaitu menggantikan karakter pasangan tertentu dengan satu substitusi.
sumber
Newline di T-SQL diwakili oleh CHAR (13) & CHAR (10) (Carriage return + Line Feed). Dengan demikian, Anda dapat membuat pernyataan REPLACE dengan teks yang ingin Anda ganti dengan baris baru.
sumber
Untuk melakukan apa yang diinginkan kebanyakan orang, buat placeholder yang bukan karakter pemecah garis yang sebenarnya. Maka Anda benar-benar dapat menggabungkan pendekatan untuk:
Dengan cara ini Anda hanya mengganti sekali. Pendekatan:
Berfungsi bagus jika Anda hanya ingin menyingkirkan karakter CRLF, tetapi jika Anda menginginkan placeholder, seperti
atau sesuatu, maka pendekatan pertama sedikit lebih akurat.
sumber
Jika tipe data kolom Anda adalah ' teks ' maka Anda akan mendapatkan pesan kesalahan sebagai
Dalam hal ini Anda perlu melemparkan teks sebagai nvarchar dan kemudian ganti
sumber
Jika Anda memiliki masalah di mana Anda hanya ingin menghapus mengikuti karakter, Anda dapat mencoba ini:
Ini memecahkan masalah yang saya miliki dengan alamat tempat prosedur membuat bidang dengan jumlah baris tetap, bahkan jika baris itu kosong. Untuk menghemat ruang dalam laporan SSRS saya, saya memotongnya.
sumber
Jika Anda memiliki prosedur terbuka dengan menggunakan sp_helptext maka cukup salin semua teks dalam kueri sql baru dan tekan tombol ctrl + h menggunakan ekspresi reguler untuk mengganti dan meletakkan ^ \ n di bidang cari ganti dengan kosong. untuk melihat gambar lebih detail. masukkan deskripsi gambar di sini
sumber
Untuk solusi @Cerebrus: untuk H2 untuk string "+" tidak didukung. Begitu:
sumber
Jawaban yang diposting di atas / sebelumnya yang dilaporkan menggantikan CHAR (13) CHAR (10) carriage return:
Tidak akan pernah mendapatkan
REPLACE(MyField, CHAR(13) + CHAR(10), 'something else')
bagian dari kode dan akan mengembalikan hasil yang tidak diinginkan:Dan BUKAN hasil yang diinginkan dari satu:
Itu membutuhkan skrip REPLACE untuk ditulis ulang seperti itu:
Saat aliran pertama menguji pernyataan REPLACE Kiri Pertama / Terjauh, maka jika gagal akan terus menguji pernyataan REPLACE berikutnya.
sumber