Saya perlu memastikan bahwa bidang tertentu tidak memiliki lebih dari satu spasi (saya tidak peduli tentang semua spasi putih, hanya spasi) di antara karakter.
Begitu
'single spaces only'
perlu diubah menjadi
'single spaces only'
Di bawah ini tidak akan berfungsi
select replace('single spaces only',' ',' ')
karena akan menghasilkan
'single spaces only'
Saya benar-benar lebih memilih untuk tetap menggunakan T-SQL asli daripada solusi berbasis CLR.
Pikiran?
sql-server
tsql
Christoph
sumber
sumber
Jawaban:
Bahkan lebih rapi:
Keluaran:
sumber
Ini akan berhasil:
sumber
"release < now"
maka Anda akan mendapatkan"release<><><<><>now"
,"release<<>now"
,"release< now"
, yang sama dengan pasangan simbol, jika Anda memiliki satu pun dari pasangan maka itu akan bergerakJika Anda tahu bahwa jumlah spasi dalam satu baris tidak akan lebih dari jumlah tertentu, Anda dapat menumpuk penggantian:
4 pengganti harus menetapkan hingga 16 spasi berturut-turut (16, lalu 8, lalu 4, lalu 2, lalu 1)
Jika bisa jauh lebih lama, maka Anda harus melakukan sesuatu seperti fungsi in-line:
Lakukan saja
sumber
Ganti akan berfungsi di semua spasi ganda, tidak perlu mengganti banyak. Ini adalah solusi berbasis set.
sumber
Itu bisa dilakukan secara rekursif melalui fungsi:
lalu, misalnya:
kembali:
Atau solusi berdasarkan metode yang dijelaskan oleh @ agdk26 atau @Neil Knight (tetapi lebih aman),
kedua contoh menampilkan keluaran di atas:
atau
Bagaimana itu bekerja:
Perhatian:
Karakter / string yang digunakan untuk mengganti spasi tidak boleh ada di awal atau akhir string dan berdiri sendiri.
sumber
Ini adalah kekuatan yang kasar, tetapi akan berhasil
sumber
Berikut adalah fungsi sederhana yang saya buat untuk membersihkan spasi sebelum atau sesudah, dan beberapa spasi dalam sebuah string. Ini dengan anggun menangani hingga sekitar 108 ruang dalam satu regangan dan sebanyak blok yang ada di string. Anda dapat meningkatkannya dengan faktor 8 dengan menambahkan garis tambahan dengan potongan spasi yang lebih besar jika perlu. Tampaknya bekerja dengan cepat dan tidak menyebabkan masalah apa pun meskipun digunakan secara umum dalam aplikasi besar.
sumber
Temukan ini saat menggali jawaban:
Jawaban lengkap (dengan penjelasan) ditarik dari: http://techtipsbysatish.blogspot.com/2010/08/sql-server-replace-multiple-spaces-with.html
Pada pandangan kedua, tampaknya hanya ada versi yang sedikit berbeda dari jawaban yang dipilih.
sumber
Metode # 1
Metode pertama adalah mengganti spasi ekstra antar kata dengan kombinasi simbol yang tidak umum sebagai penanda sementara. Kemudian Anda dapat mengganti simbol penanda sementara menggunakan fungsi ganti, bukan perulangan.
Berikut adalah contoh kode yang menggantikan teks dalam variabel String.
Uji Waktu Eksekusi # 1: Dalam sepuluh kali operasi metode penggantian ini, waktu tunggu rata-rata pada balasan server adalah 1,7 milidetik dan total waktu eksekusi adalah 4,6 milidetik. Uji Waktu Eksekusi # 2: Waktu tunggu rata-rata pada balasan server adalah 1,7 milidetik dan total waktu eksekusi adalah 3,7 milidetik.
Metode # 2
Metode kedua tidak seanggun yang pertama, tetapi juga menyelesaikan pekerjaan. Metode ini bekerja dengan menumpuk empat (atau lebih) pernyataan ganti yang menggantikan dua spasi kosong dengan satu spasi kosong.
Uji Waktu Eksekusi # 1: Dalam sepuluh kali operasi metode penggantian ini, waktu tunggu rata-rata pada balasan server adalah 1,9 milidetik dan total waktu eksekusi adalah 3,8 milidetik. Uji Waktu Eksekusi # 2: Waktu tunggu rata-rata pada balasan server adalah 1,8 milidetik dan total waktu eksekusi adalah 4,8 milidetik.
Metode # 3
Metode ketiga untuk mengganti spasi ekstra antar kata adalah dengan menggunakan loop sederhana. Anda dapat melakukan pemeriksaan pada spasi ekstra di loop sementara dan kemudian menggunakan fungsi replace untuk mengurangi spasi ekstra dengan setiap iterasi loop.
Uji Waktu Eksekusi # 1: Dalam sepuluh kali operasi metode penggantian ini, waktu tunggu rata-rata pada balasan server adalah 1,8 milidetik dan total waktu eksekusi adalah 3,4 milidetik. Uji Waktu Eksekusi # 2: Waktu tunggu rata-rata pada balasan server adalah 1,9 milidetik dan total waktu eksekusi adalah 2,8 milidetik.
sumber
Ini adalah solusi melalui penggantian berganda, yang berfungsi untuk string apa pun (tidak memerlukan karakter khusus, yang bukan bagian dari string).
sumber
Saya menggunakan solusi FOR XML PATH untuk mengganti beberapa spasi menjadi satu spasi
Idenya adalah untuk mengganti spasi dengan tag XML Kemudian membagi string XML menjadi fragmen string tanpa tag XML Akhirnya menggabungkan nilai string tersebut dengan menambahkan karakter spasi tunggal di antara dua
Berikut adalah bagaimana fungsi UDF terakhir dapat dipanggil
sumber
sumber
Saya biasanya menggunakan pendekatan ini:
sumber
Hanya Menambahkan Metode Lain-
Mengganti Beberapa Spasi dengan Spasi Tunggal TANPA Menggunakan REPLACE di SQL Server-
sumber
Temukan kode di bawah ini
Ini berhasil untuk saya .. Semoga ini membantu ...
sumber
Anda bisa mencoba ini:
sumber
Coba ini..
sumber