Chciałbym zastąpić (lub usunąć) znak nowej linii w łańcuchu TSQL. Jakieś pomysły?
Oczywistość
REPLACE(@string, CHAR(13), '')
po prostu tego nie zrobię ...
W rzeczywistości nowy wiersz w poleceniu SQL lub ciągu skryptu może być dowolnym z CR, LF lub CR + LF. Aby je wszystkie, potrzebujesz czegoś takiego:
SELECT REPLACE(REPLACE(@str, CHAR(13), ''), CHAR(10), '')
.columns[0]
zamiast tego.źródło
Mogę spóźnić się na imprezę o rok, ale codziennie pracuję nad zapytaniami i MS-SQL, i mam już dość wbudowanych funkcji LTRIM () i RTRIM () (i zawsze muszę je wywoływać razem) oraz nie wychwytywania „brudnych” danych, które miały na końcu znaki nowej linii, więc zdecydowałem, że najwyższy czas, aby zaimplementować lepszą funkcję TRIM. Mile widziane opinie innych!
Zastrzeżenie : to faktycznie usuwa (zastępuje pojedynczą białą spacją) rozszerzone formy białych znaków (tabulator, wstawianie wiersza, powrót karetki itp.), Więc została zmieniona na „CleanAndTrim” z mojej oryginalnej odpowiedzi. Chodzi o to, że twój ciąg nie potrzebuje w środku takich znaków z białymi spacjami, a więc jeśli nie występują na czubku / ogonie, należy je zastąpić zwykłą spacją. Jeśli celowo zapisałeś takie znaki w swoim ciągu (powiedzmy, kolumnę danych, na której zamierzasz to uruchomić), NIE ZRÓB TO! Ulepsz tę funkcję lub napisz własną, która dosłownie usuwa te znaki z punktów końcowych ciągu, a nie z „ciała”.
Ok, teraz, gdy oświadczenie zostało zaktualizowane, oto kod.
Twoje zdrowie!
Kolejne zrzeczenie się odpowiedzialności : Typowym podziałem wiersza w systemie Windows jest CR + LF, więc jeśli łańcuch zawiera te znaki, możesz zastąpić je „podwójnymi” spacjami.
AKTUALIZACJA, 2016 : Nowa wersja, która daje możliwość zastąpienia znaków specjalnych spacjami innymi znakami do wyboru! Obejmuje to również komentarz i obejście dla parowania Windows CR + LF, tj. Zastępuje tę określoną parę znaków pojedynczym podstawieniem.
źródło
Nowa linia w T-SQL jest reprezentowana przez CHAR (13) i CHAR (10) (powrót karetki + przesunięcie wiersza). W związku z tym możesz utworzyć instrukcję REPLACE z tekstem, który chcesz zastąpić nowym wierszem.
źródło
Aby zrobić to, co chciałaby większość ludzi, utwórz symbol zastępczy, który nie jest rzeczywistym znakiem podziału linii. Następnie możesz połączyć podejścia do:
W ten sposób zamieniasz tylko raz. Podejście:
Działa świetnie, jeśli chcesz po prostu pozbyć się znaków CRLF, ale jeśli chcesz symbol zastępczy, taki jak
czy coś, to pierwsze podejście jest nieco dokładniejsze.
źródło
Jeśli typ danych kolumny to „ tekst ”, pojawi się komunikat o błędzie jako
W takim przypadku musisz rzucić tekst jako nvarchar, a następnie zastąpić
źródło
Jeśli masz problem polegający na tym, że chcesz usunąć tylko końcowe znaki, możesz spróbować:
To rozwiązało problem, który miałem z adresami, w których procedura tworzyła pole ze stałą liczbą linii, nawet jeśli te linie były puste. Aby zaoszczędzić miejsce w moim raporcie SSRS, zmniejszyłem je.
źródło
Jeśli masz otwartą procedurę z użyciem sp_helptext, po prostu skopiuj cały tekst w nowym zapytaniu sql i naciśnij ctrl + h przycisk użyj wyrażenia regularnego do zamiany i umieść ^ \ n w polu znajduj zamień na puste. po więcej szczegółów sprawdź obraz. wprowadź opis zdjęcia tutaj
źródło
Do rozwiązania @Cerebrus: dla H2 dla ciągów „+” nie jest obsługiwane. Więc:
źródło
Odpowiedź zamieszczona powyżej / wcześniej, która została zgłoszona jako zastępująca zwrot karetki CHAR (13) CHAR (10):
Nigdy nie przejdzie do
REPLACE(MyField, CHAR(13) + CHAR(10), 'something else')
części kodu i zwróci niechciany wynik:I NIE pożądany wynik pojedynczego:
Wymagałoby to przepisania skryptu REPLACE jako takiego:
Gdy przepływ najpierw przetestuje pierwszą / najdalszą lewą instrukcję REPLACE, to w przypadku niepowodzenia będzie kontynuować testowanie następnej instrukcji REPLACE.
źródło