Olá Pessoal,
Bom dia.
Neste post irei comentar rapidamente sobre uma função UDF (User Defined Function) que costumava utilizar para remover acentos e caracteres especiais de uma string no SQL Server.
Removendo acentos
Existem várias formas de se fazer isso, como utilizando uma UDF para fazer esse trabalho, uma função SQLCLR ou a que eu prefiro, que é utilizando o COLLATION.
Utilizando uma função UDF
CREATE FUNCTION [dbo].[fncRemove_Acentuacao2](
@String VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
/****************************************************************************************************************/
/** RETIRA ACENTUAÇÃO DAS VOGAIS **/
/****************************************************************************************************************/
SET @String = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@String,'á','a'),'à','a'),'â','a'),'ã','a'),'ä','a')
SET @String = REPLACE(REPLACE(REPLACE(REPLACE(@String,'é','e'),'è','e'),'ê','e'),'ë','e')
SET @String = REPLACE(REPLACE(REPLACE(REPLACE(@String,'í','i'),'ì','i'),'î','i'),'ï','i')
SET @String = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@String,'ó','o'),'ò','o'),'ô','o'),'õ','o'),'ö','o')
SET @String = REPLACE(REPLACE(REPLACE(REPLACE(@String,'ú','u'),'ù','u'),'û','u'),'ü','u')
/****************************************************************************************************************/
/** RETIRA ACENTUAÇÃO DAS CONSOANTES **/
/****************************************************************************************************************/
SET @String = REPLACE(@String,'ý','y')
SET @String = REPLACE(@String,'ñ','n')
SET @String = REPLACE(@String,'ç','c')
RETURN UPPER(@String)
END
GO

Utilizando uma função SQLCLR
using System.Text;
using System.Data.SqlTypes;
using System.Globalization;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString fncRemove_Acentuacao(SqlString Ds_Texto)
{
if (Ds_Texto.IsNull)
return null;
var s = Ds_Texto.Value.Normalize(NormalizationForm.FormD);
var sb = new StringBuilder();
foreach (var t in s)
{
var uc = CharUnicodeInfo.GetUnicodeCategory(t);
if (uc != UnicodeCategory.NonSpacingMark)
{
sb.Append(t);
}
}
return sb.ToString();
}
};

Utilizando o Collation
Na minha opinião, essa é a melhor forma de se remover acentuação de uma string no SQL Server. Ela é a forma mais rápida de se fazer e é nativa do próprio banco de dados (ou seja, universal, funciona em qualquer banco SQL Server).

Para saber todos os tipos de COLLATION, você pode executar o comando abaixo:
select name, description
from ::fn_helpcollations()
where name like 'SQL_Latin%'
AND NAME NOT LIKE '%1254%'
Removendo caracteres especiais
Com o uso da função abaixo, pode-se remover aqueles caracteres especiais de uma string e retornar apenas os caracteres alfanuméricos.
CREATE FUNCTION [dbo].[fncRemove_Caracteres_Especiais](
@String VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE
@Result VARCHAR(MAX),
@StartingIndex INT = 0
WHILE (1 = 1)
BEGIN
SET @StartingIndex = PATINDEX('%[^a-Z|0-9|^ ]%',@String)
IF (@StartingIndex <> 0)
SET @String = REPLACE(@String,SUBSTRING(@String, @StartingIndex,1),'')
ELSE
BREAK
END
SET @Result = REPLACE(@String,'|','')
RETURN @Result
END
GO

É isso aí, pessoal!
Até a próxima.
Comentários (0)
Carregando comentários…