Estou trabalhando com o SQL Server 2008 e estou procurando uma função como ltrim
e rtrim
que também remova guias iniciais e finais, espaços duplos, retornos de carro, alimentações de linha, etc.
Existem várias funções por aí, mas todas as que encontrei têm limitações, por exemplo, truncar a string para 8.000 caracteres. por exemplo (de acordo com alguns dos comentários):
Um dos comentários propôs uma solução melhor, mas - 1
causa um incorrect syntax
erro e não sei por quê.
CREATE FUNCTION dbo.SuperTrimLeft(@str varchar(MAX)) RETURNS varchar(MAX)
AS
BEGIN
IF (ASCII(LEFT(@str, 1)) < 33) BEGIN
SET @str = STUFF(@str, 1, PATINDEX('%[^'+CHAR(0)+'-'+CHAR(32)+']%', @str) – 1, ' ');
END;
RETURN @str;
END;
Então, minha pergunta é: qual é a melhor abordagem para realizar a tarefa acima?
A melhor maneira provavelmente seria criar uma função CLR e usar bibliotecas .NET Framework.
Uma tentativa de TSQL está abaixo.
Os delimitadores
[
e]
são aplicados apenas para facilitar a verificação de que não há espaço em branco escondido ali. Remova-os quando estiver satisfeito, este é o caso.Porque você copiou e colou do site e a página não mostra um hífen/menos, mas um traço .
Você pode simplesmente posicionar o cursor atrás dele e excluí-lo, digitar menos no teclado e o código funcionará.
Se você deseja modificar o código dos comentários para também executar o cenário de corte correto, pode fazer como o artigo e criar uma função que apenas inverte a string duas vezes (código copiado do artigo, mas alterado para usar
SuperTrimLeft
).As duas respostas dadas até agora envolvem pelo menos uma inversão da corda para atacar o lado direito.
Este método não.
A resposta aceita não lida com strings contendo apenas caracteres de quebra de linha.
Aqui está uma função que lida com isso adequadamente, com base na solução de Martin.