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 | 
É isso aí, pessoal!
Até a próxima.





 
																								 
																								 Portuguese
 Portuguese                 English
 English                            
1 Response
[…] Como remover acentuação e caracteres especiais de uma string no SQL Server […]