Preciso garantir que um determinado campo não tenha mais de um espaço (não estou preocupado com todos os espaços em branco, apenas espaço) entre os caracteres.
assim
'single spaces only'
precisa ser transformado em
'single spaces only'
O abaixo não vai funcionar
select replace('single spaces only',' ',' ')
pois isso resultaria em
'single spaces only'
Eu realmente preferiria ficar com o T-SQL nativo em vez de uma solução baseada em CLR.
Pensamentos?
sql-server
tsql
Christoph
fonte
fonte
Respostas:
Ainda mais organizado:
Resultado:
fonte
Isso funcionaria:
fonte
"release < now"
então você vai ter"release<><><<><>now"
,"release<<>now"
,"release< now"
, é a mesma com qualquer par de símbolos, se você tem uma única um do par, então ele vai se moverSe você sabe que não haverá mais do que um certo número de espaços em uma linha, você pode simplesmente aninhar a substituição:
4 substituições devem fixar até 16 espaços consecutivos (16, depois 8, depois 4, depois 2 e depois 1)
Se pudesse ser significativamente mais longo, você teria que fazer algo como uma função in-line:
Então é só fazer
fonte
Substituir funcionará em todos os espaços duplos, não há necessidade de colocar vários substituições. Esta é a solução baseada em conjunto.
fonte
Isso pode ser feito recursivamente por meio da função:
então, por exemplo:
retorna:
Ou a solução baseada no método descrito por @ agdk26 ou @Neil Knight (mas mais seguro)
ambos os exemplos retornam a saída acima:
ou
Como funciona:
Cuidado: O
caractere / string usado para substituir espaços não deve existir no início ou no final da string e ficar sozinho.
fonte
Isso é um pouco força bruta, mas funcionará
fonte
Aqui está uma função simples que criei para limpar todos os espaços antes ou depois e vários espaços dentro de uma string. Ele segura até cerca de 108 espaços em um único trecho e tantos blocos quantos houver na corda. Você pode aumentar isso por fatores de 8, adicionando linhas adicionais com pedaços maiores de espaços, se necessário. Parece ter um desempenho rápido e não causou nenhum problema, apesar de seu uso generalizado em um aplicativo grande.
fonte
Encontrei isto enquanto procurava por uma resposta:
A resposta completa (com explicação) foi obtida de: http://techtipsbysatish.blogspot.com/2010/08/sql-server-replace-multiple-spaces-with.html
Olhando uma segunda vez, parece ser apenas uma versão ligeiramente diferente da resposta selecionada.
fonte
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.
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.
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.
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.
fonte
Esta é a solução por meio de substituição múltipla, que funciona para qualquer string (não precisa de caracteres especiais, que não fazem parte da string).
fonte
Eu uso a solução FOR XML PATH para substituir vários espaços em um único espaço
A ideia é substituir os espaços por tags XML Em seguida, dividir a string XML em fragmentos de string sem tags XML Finalmente concatenando esses valores de string adicionando caracteres de espaço único entre dois
Aqui está como a função UDF final pode ser chamada
fonte
fonte
Normalmente uso esta abordagem:
fonte
Apenas adicionando outro método-
Substituindo Vários Espaços com Espaço Único SEM usar REPLACE no SQL Server-
fonte
Encontre o código abaixo
Isso funcionou para mim .. Espero que isso ajude ...
fonte
Você pode tentar isto:
fonte
Experimente isso ..
fonte