Método 1
O primeiro método é substituir os espaços extras entre as palavras por uma combinação incomum de símbolos como um marcador temporário. Em seguida, você pode substituir os símbolos de marcador temporário usando a função de substituição em vez de um loop.
Aqui está um exemplo de código que substitui o texto em uma variável String.
DECLARE @testString AS VARCHAR(256) = ' Test text with random* spacing. Please normalize this spacing!';
SELECT REPLACE(REPLACE(REPLACE(@testString, ' ', '*^'), '^*', ''), '*^', ' ');
Teste de tempo de execução nº 1: em dez execuções desse método de substituição, o tempo médio de espera nas respostas do servidor foi de 1,7 milissegundos e o tempo total de execução foi de 4,6 milissegundos. Teste de tempo de execução nº 2: o tempo médio de espera nas respostas do servidor foi de 1,7 milissegundos e o tempo total de execução foi de 3,7 milissegundos.
Método # 2
O segundo método não é tão elegante quanto o primeiro, mas também realiza o trabalho. Este método funciona aninhando quatro (ou opcionalmente mais) instruções de substituição que substituem dois espaços em branco por um espaço em branco.
DECLARE @testString AS VARCHAR(256) = ' Test text with random* spacing. Please normalize this spacing!';
SELECT REPLACE(REPLACE(REPLACE(REPLACE(@testString,' ',' '),' ',' '),' ',' '),' ',' ')
Teste de tempo de execução nº 1: em dez execuções desse método de substituição, o tempo médio de espera nas respostas do servidor foi de 1,9 milissegundos e o tempo total de execução foi de 3,8 milissegundos. Teste de tempo de execução nº 2: o tempo médio de espera nas respostas do servidor foi de 1,8 milissegundos e o tempo total de execução foi de 4,8 milissegundos.
Método # 3
O terceiro método de substituir espaços extras entre palavras é usar um loop simples. Você pode fazer uma verificação nos espaços extras em um loop while e, em seguida, usar a função replace para reduzir os espaços extras a cada iteração do loop.
DECLARE @testString AS VARCHAR(256) = ' Test text with random* spacing. Please normalize this spacing!';
WHILE CHARINDEX(' ',@testString) > 0
SET @testString = REPLACE(@testString, ' ', ' ')
SELECT @testString
Teste de tempo de execução nº 1: em dez execuções desse método de substituição, o tempo médio de espera nas respostas do servidor foi de 1,8 milissegundos e o tempo total de execução foi de 3,4 milissegundos. Teste de tempo de execução nº 2: o tempo médio de espera nas respostas do servidor foi de 1,9 milissegundos e o tempo total de execução foi de 2,8 milissegundos.