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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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:
1 2 3 4 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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 |
And that's it, folks!
Até a próxima.
1 Response
[…] Como remover acentuação e caracteres especiais de uma string no SQL Server […]