quinta-feira, 12 de novembro de 2009

Função em T-SQL para remover acentos

Função em T-SQL para remover acentos. Para  testá-la:

select dbo.FREMOVE_ACENTOS('Â TESTÉ DE AÔÎ')


O resultado será: "A TESTE DE AOI"


CREATE FUNCTION FREMOVE_ACENTOS (@TEXTO VARCHAR (5000))RETURNS VARCHAR (5000)  AS
BEGIN
DECLARE @COMACENTOS VARCHAR(50),
 @SEMACENTOS VARCHAR (50),
 @QTD_TEXTO INT,
 @CONTADOR INT,
 @QTD INT,
 @CONT INT,
 @CONT_C INT,
 @LETRA_T VARCHAR(1),
 @LETRA_C VARCHAR(1),
 @RESULTADO VARCHAR (5000),
 @TEXTE VARCHAR (30)

SET @COMACENTOS = 'ÀÂÊÔÎÛÃÕÁÉÍÓÚÇÜ'
SET @SEMACENTOS =  'AAEOIUAOAEIOUCU'
SET @QTD_TEXTO = (SELECT LEN(@TEXTO))
SET @CONTADOR = 0
SET @RESULTADO = ''

inicio:

WHILE @CONTADOR < @QTD_TEXTO
BEGIN
  SET @CONTADOR = @CONTADOR+1
  SET @LETRA_T = (SELECT SUBSTRING(@TEXTO,@CONTADOR,1))
  SET @CONT = (SELECT LEN(@COMACENTOS)) 
  SET @QTD = 0     
   WHILE @QTD < @CONT
 BEGIN
  SET @QTD = @QTD + 1
  SET @LETRA_C = (SELECT SUBSTRING(@COMACENTOS,@QTD,1))
  IF @LETRA_C = @LETRA_T
   BEGIN
           SET @RESULTADO = @RESULTADO + (SELECT SUBSTRING(@SEMACENTOS,@QTD,1))
           GOTO INICIO
    END
     ELSE
        BEGIN
                  IF @QTD = @CONT
       SET @RESULTADO =  @RESULTADO + @LETRA_T   
          
               END
 END
   
END
RETURN  @RESULTADO
END

3 comentários:

  1. Rapaz, me quebrou um galhão. Obrigado..

    ResponderExcluir
  2. Como faço para que esta function fique disponível para todos os DB de um server e eu não precise compilá-la em todos os bancos?

    ResponderExcluir
  3. Você pode criar a função no master, e acessá-la assim:

    select MASTER.dbo.FREMOVE_ACENTOS

    ResponderExcluir

Leave your comment here!