Muszę się upewnić, że dane pole nie ma więcej niż jednej spacji (nie przejmuję się wszystkimi spacjami, tylko spacjami) między znakami.
Więc
'single spaces only'
należy zamienić na
'single spaces only'
Poniższe nie będą działać
select replace('single spaces only',' ',' ')
jak by to skutkowało
'single spaces only'
Naprawdę wolałbym trzymać się natywnego T-SQL zamiast rozwiązania opartego na CLR.
Myśli?
sql-server
tsql
Christoph
źródło
źródło
Odpowiedzi:
Jeszcze porządniej:
Wynik:
źródło
To zadziała:
źródło
"release < now"
wtedy dostaniesz"release<><><<><>now"
,"release<<>now"
,"release< now"
, jego samo z każdej pary symboli, jeśli masz ani jednej pary to będzie poruszaćJeśli wiesz, że nie będzie więcej niż pewna liczba spacji w rzędzie, możesz po prostu zagnieździć zastąpienie:
4 zmiany powinny naprawić do 16 kolejnych odstępów (16, potem 8, potem 4, potem 2, potem 1)
Gdyby mógł być znacznie dłuższy, musiałbyś wykonać coś w rodzaju funkcji in-line:
Następnie po prostu zrób
źródło
Zastąp będzie działać na wszystkich podwójnych spacjach, bez konieczności wielokrotnego zastępowania. To jest rozwiązanie oparte na zestawie.
źródło
Można to zrobić rekurencyjnie za pomocą funkcji:
wtedy na przykład:
zwroty:
Lub rozwiązanie oparte na metodzie opisanej przez @ agdk26 lub @Neil Knight (ale bezpieczniejsze)
oba przykłady zwracają wynik powyżej:
lub
Jak to działa:
Uwaga:
znak / ciąg używany do zastępowania spacji nie powinien występować na początku ani na końcu ciągu i powinien być samodzielny.
źródło
To trochę brutalna siła, ale zadziała
źródło
Oto prosta funkcja, którą stworzyłem do czyszczenia wszelkich spacji przed lub po, oraz wielu spacji w ciągu. Z wdziękiem obsługuje do około 108 miejsc w jednym naciągu i tyle bloków, ile jest w sznurku. Możesz zwiększyć ten współczynnik o współczynnik 8, dodając dodatkowe linie z większymi fragmentami spacji, jeśli zajdzie taka potrzeba. Wydaje się, że działa szybko i nie powodował żadnych problemów pomimo ogólnego zastosowania w dużej aplikacji.
źródło
Znalazłem to podczas szukania odpowiedzi:
Pełną odpowiedź (z wyjaśnieniem) pobrano z: http://techtipsbysatish.blogspot.com/2010/08/sql-server-replace-multiple-spaces-with.html
Przy drugim spojrzeniu wydaje się, że jest to tylko nieco inna wersja wybranej odpowiedzi.
źródło
Metoda nr 1
Pierwsza metoda polega na zastąpieniu dodatkowych spacji między słowami nietypową kombinacją symboli jako tymczasowy znacznik. Następnie możesz zastąpić tymczasowe symbole znaczników za pomocą funkcji replace zamiast pętli.
Oto przykład kodu, który zastępuje tekst w zmiennej String.
Test czasu wykonywania nr 1: W dziesięciu uruchomieniach tej metody zastępczej średni czas oczekiwania na odpowiedzi serwera wyniósł 1,7 milisekundy, a całkowity czas wykonania wyniósł 4,6 milisekundy. Test czasu wykonywania nr 2: średni czas oczekiwania na odpowiedzi serwera wyniósł 1,7 milisekundy, a całkowity czas wykonania wyniósł 3,7 milisekundy.
Metoda nr 2
Druga metoda nie jest tak elegancka jak pierwsza, ale również wykonuje zadanie. Ta metoda działa poprzez zagnieżdżenie czterech (lub opcjonalnie więcej) instrukcji zamiany, które zastępują dwie spacje jedną spacją.
Test czasu wykonywania nr 1: W dziesięciu uruchomieniach tej metody zastępczej średni czas oczekiwania na odpowiedzi serwera wyniósł 1,9 milisekundy, a całkowity czas wykonania 3,8 milisekundy. Test czasu wykonywania nr 2: średni czas oczekiwania na odpowiedzi serwera wyniósł 1,8 milisekundy, a całkowity czas wykonania - 4,8 milisekundy.
Metoda nr 3
Trzecią metodą zastępowania dodatkowych spacji między słowami jest użycie prostej pętli. Możesz sprawdzić dodatkowe spacje w pętli while, a następnie użyć funkcji replace w celu zmniejszenia dodatkowych spacji przy każdej iteracji pętli.
Test czasu wykonywania nr 1: W dziesięciu uruchomieniach tej metody zastępczej średni czas oczekiwania na odpowiedzi serwera wyniósł 1,8 milisekundy, a całkowity czas wykonania 3,4 milisekundy. Test czasu wykonywania nr 2: średni czas oczekiwania na odpowiedzi serwera wyniósł 1,9 milisekundy, a całkowity czas wykonania 2,8 milisekundy.
źródło
Jest to rozwiązanie polegające na wielokrotnym zastępowaniu, które działa dla dowolnych ciągów (nie wymaga znaków specjalnych, które nie są częścią ciągu).
źródło
Używam rozwiązania FOR XML PATH, aby zamienić wiele spacji w jedną
Pomysł polega na zastąpieniu spacji znacznikami XML Następnie podziel ciąg XML na fragmenty bez znaczników XML Na koniec konkatenację tych wartości ciągów poprzez dodanie pojedynczych znaków spacji pomiędzy dwoma
Oto jak można wywołać ostateczną funkcję UDF
źródło
źródło
Zwykle używam tego podejścia:
źródło
Wystarczy dodać inną metodę
Zastąpienie wielu przestrzeni pojedynczą spacją BEZ użycia REPLACE w SQL Server-
źródło
Proszę znaleźć poniższy kod
To zadziałało dla mnie ... Mam nadzieję, że to pomoże ...
źródło
Możesz spróbować tego:
źródło
Spróbuj tego..
źródło