Gostaria de substituir (ou remover) um caractere de nova linha em uma string TSQL. Alguma ideia?
O óbvio
REPLACE(@string, CHAR(13), '')
simplesmente não vai fazer isso ...
Na verdade, uma nova linha em um comando SQL ou sequência de scripts pode ser qualquer um de CR, LF ou CR + LF. Para obtê-los todos, você precisa de algo como isto:
SELECT REPLACE(REPLACE(@str, CHAR(13), ''), CHAR(10), '')
.columns[0]
.fonte
Talvez eu esteja atrasado um ano para a festa, mas trabalho com consultas e MS-SQL todos os dias e me cansei das funções internas LTRIM () e RTRIM () (e sempre tenho que chamá-las juntas) e de não pegar dados "sujos" que tinham novas linhas no final, então decidi que estava na hora de implementar uma função TRIM melhor. Gostaria de receber feedback de colegas!
Isenção de responsabilidade : isso na verdade remove (substitui por um único espaço em branco) as formas estendidas de espaço em branco (guia, alimentação de linha, retorno de carro etc.), por isso foi renomeado como "CleanAndTrim" da minha resposta original. A idéia aqui é que sua string não precise de caracteres especiais em branco em branco e, se não ocorrerem na cabeça / cauda, eles deverão ser substituídos por um espaço simples. Se você intencionalmente armazenou esses caracteres na sua string (digamos, na sua coluna de dados que você está prestes a executá-la), NÃO FAÇA! Melhore essa função ou escreva você mesmo que literalmente remove esses caracteres dos pontos finais da string, não do 'corpo'.
Ok, agora que o aviso foi atualizado, aqui está o código.
Felicidades!
Outro aviso de isenção de responsabilidade : sua quebra de linha típica do Windows é CR + LF; portanto, se sua string contiver esses itens, você poderá substituí-los por espaços "duplos".
ATUALIZAÇÃO, 2016 : Uma nova versão que oferece a opção de substituir esses caracteres de espaço em branco especial por outros caracteres de sua escolha! Isso também inclui comentários e a solução alternativa para o emparelhamento Windows CR + LF, ou seja, substitui esse par de caracteres específico por uma única substituição.
fonte
A nova linha no T-SQL é representada por CHAR (13) e CHAR (10) (retorno de carro + avanço de linha). Assim, você pode criar uma instrução REPLACE com o texto que deseja substituir a nova linha.
fonte
Para fazer o que a maioria das pessoas deseja, crie um espaço reservado que não seja um caractere de quebra de linha real. Em seguida, você pode realmente combinar as abordagens para:
Dessa forma, você substitui apenas uma vez. A abordagem de:
Funciona muito bem se você quiser se livrar dos caracteres CRLF, mas se desejar um espaço reservado, como
algo assim, a primeira abordagem será um pouco mais precisa.
fonte
Se o tipo de dados da sua coluna for ' texto ', você receberá uma mensagem de erro como
Nesse caso, você precisa converter o texto como nvarchar e substituir
fonte
Se você tiver um problema em que deseja remover apenas os caracteres finais , tente o seguinte:
Isso resolveu um problema que tive com endereços em que um procedimento criava um campo com um número fixo de linhas, mesmo que essas linhas estivessem vazias. Para economizar espaço no meu relatório do SSRS, eu os reduzi.
fonte
Se você tiver um procedimento aberto com o uso de sp_helptext, basta copiar todo o texto na nova consulta sql e pressionar ctrl + h. Use a expressão regular para substituir e coloque ^ \ n no campo Localizar, substitua por branco. para obter mais detalhes, verifique a imagem. insira a descrição da imagem aqui
fonte
Para a solução @Cerebrus: para H2 para as seqüências de caracteres "+" não há suporte. Assim:
fonte
A resposta postada acima / anteriormente relatada para substituir o retorno de carro CHAR (13) CHAR (10):
Nunca
REPLACE(MyField, CHAR(13) + CHAR(10), 'something else')
chegará à parte do código e retornará o resultado indesejado de:E NÃO o resultado desejado de um único:
Isso exigiria que o script REPLACE fosse reescrito da seguinte maneira:
Como o fluxo testa primeiro a instrução REPLACE da 1ª / mais à esquerda, em caso de falha, continuará a testar a próxima instrução REPLACE.
fonte