Ecco un esempio si può correre:
ho deciso di lanciare i risultati come un valore Xml
, così quando si fare clic su di esso, sarà possibile visualizzare i ritorni a capo.
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]
Ricordare di rimuovere il cast-to-Xml, in quanto questo è stato fatto proprio come un Proof-of-Concept per dimostrare che funziona.
Com'è migliore della risposta attualmente accettata?
A prima vista questo può sembrare di utilizzare più funzioni rispetto alla risposta accettata.
Tuttavia, questo non è il caso.
Se si combinano i due approcci elencati nella risposta accettata (per rimuovere sia Trailing e gli spazi Leading), si sia dovuto fare due passaggi aggiornando il record, o copia tutti una logica nell'altro (ovunque @String
è elencato), il che causerebbe più chiamate di funzione e diventerebbe ancora più difficile da leggere.
Questo va bene, ma fallisce se la stringa contiene solo caratteri CRLF. PATINDEX restituisce 0 in questo caso, quindi viene restituita l'intera stringa. – Dave