Oto przykład można uruchomić:
postanowiłem rzucić wyniki jako wartość Xml
, więc kiedy kliknij na niego, będziesz mógł zobaczyć Zwroty Carriage.
DECLARE @CRLF Char(2) = (CHAR(0x0D) + CHAR(0x0A))
DECLARE @String VarChar(MAX) = @CRLF + @CRLF + ' Hello' + @CRLF + 'World ' + @CRLF + @CRLF
--Unmodified String:
SELECT CAST(@String as Xml)[Unmodified]
--Remove Trailing Whitespace (including Spaces).
SELECT CAST(LEFT(@String, LEN(REPLACE(@String, @CRLF, ' '))) as Xml)[RemoveTrailingWhitespace]
--Remove Leading Whitespace (including Spaces).
SELECT CAST(RIGHT(@String, LEN(REVERSE(REPLACE(@String, @CRLF, ' ')))) as Xml)[RemoveLeadingWhitespace]
--Remove Leading & Trailing Whitespace (including Spaces).
SELECT CAST(SUBSTRING(@String, LEN(REPLACE(@String, ' ', '_')) - LEN(REVERSE(REPLACE(@String, @CRLF, ' '))) + 1, LEN(LTRIM(RTRIM(REPLACE(@String, @CRLF, ' '))))) as Xml)[RemoveAllWhitespace]
--Remove Only Leading and Trailing CR/LF's (while still preserving all other Whitespace - including Spaces). - 04/06/2016 - MCR.
SELECT CAST(SUBSTRING(@String, PATINDEX('%[^'+CHAR(13)+CHAR(10)+']%',@String), LEN(REPLACE(@String, ' ', '_')) - PATINDEX('%[^'+CHAR(13)+CHAR(10)+']%',@String) + 1 - PATINDEX('%[^'+CHAR(13)+CHAR(10)+']%', REVERSE(@String)) + 1) as Xml)[RemoveLeadingAndTrailingCRLFsOnly]
Pamiętaj, aby usunąć Cast-to-XML, jak to zostało zrobione tak jak Proof-of-Concept, aby pokazać to działa.
Jak to jest lepsze niż obecnie akceptowana odpowiedź?
Na pierwszy rzut oka może się wydawać, że korzysta z większej liczby funkcji niż Akceptowana odpowiedź.
Jednak tak nie jest.
Jeśli połączyć oba podejścia wymienione w przyjętym Odpowiedź (aby usunąć zarówno tylną i przednią spacje), będzie trzeba albo zrobić dwa przejścia aktualizacji rekordu lub kopię wszystko jedno logiczne do drugiej (wszędzie @String
jest na liście), co spowodowałoby znacznie więcej wywołań funkcji i stałoby się jeszcze trudniejsze do odczytania.
To jest dobre, ale kończy się niepowodzeniem, jeśli ciąg zawiera tylko znaki CRLF. PATINDEX zwraca 0 w tym przypadku, więc cały ciąg jest zwracany. – Dave