Em aplicações que utilizam campos memo, integrações de dados com arquivos texto, Excel ou outras fontes de dados, podemos ter problemas com os famosos caracteres não imprimíveis.
Fontes de grande dor de cabeça, ao tratarmos campos e variáveis com estes caracteres, problemas diversos podem ser encontrados como comprimentos de campos que não correspondem ao que está visível, apresentação em aplicações Web bagunçadas, funções com retornos discrepantes, procedures com comportamentos inesperados, etc.
Pesquisando na internet localizei a função abaixo no www.sqlservercentral.com, e realizei algumas pequenas alterações, como a mudança dos tipos de dados de Varchar(8000) para Varchar(Max).
Vejam abaixo a função na íntegra:
CREATE FUNCTION dbo.RemoveNonDisplayChars(@pString VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE
@IncorrectCharLoc SMALLINT,
@Pattern CHAR(37)
SELECT @Pattern = '%['
+ CHAR(0)+CHAR(1)+CHAR(2)+CHAR(3)+CHAR(4)
+ CHAR(5)+CHAR(6)+CHAR(7)+CHAR(8)+CHAR(9)
+ CHAR(10)+CHAR(11)+CHAR(12)+CHAR(13)+CHAR(14)
+ CHAR(15)+CHAR(16)+CHAR(17)+CHAR(18)+CHAR(19)
+ CHAR(20)+CHAR(21)+CHAR(22)+CHAR(23)+CHAR(24)
+ CHAR(25)+CHAR(26)+CHAR(27)+CHAR(28)+CHAR(29)
+ CHAR(30)+CHAR(31)+CHAR(127)
+ ']%',
@IncorrectCharLoc = PATINDEX(@Pattern, @pString)
WHILE @IncorrectCharLoc > 0
SELECT @pString = STUFF(@pString, @IncorrectCharLoc, 1, ''),
@IncorrectCharLoc = PATINDEX(@Pattern, @pString)
RETURN @pString
END
GO
A query abaixo, retorna o valor 7, pois além da string “teste” temos também uma quebra de linha:
SELECT LEN('
teste')
A query abaixo, retorna o valor 5, pois se utiliza da função de remoção de caracteres não imprimíveis:
SELECT LEN(dbo.RemoveNonDisplayChars('
teste'))
Até a próxima!
Nenhum comentário:
Postar um comentário
Leave your comment here!