Função para tirar acento no SQL Server

Olá pessoal…

Recentemente precisei criar uma função que retirasse acentos via SQL Server.

Imagina que você disponibiliza um portal para pessoas fazerem consultas, e ao pesquisar sobre árvore, a pessoa pode digitar arvore, Arvore, Árvore, ÁRVORE, etc…

Pensando nisso, preparei uma função simples para o banco de dados, onde é possível retirar esses acentos, e para chamá-la é bem simples, abaixo dois exemplos:

SELECT dbo.fTiraAcento('árvore')

...

SELECT * FROM TABELA WHERE dbo.fTiraAcento(UPPER(CAMPO)) LIKE '%ÁRVORE%')

Abaixo um print de exemplo:

Exemplo de função que retira acento no SQL Server

Exemplo de função que retira acento no SQL Server

E o código fonte criado:

CREATE FUNCTION dbo.fTiraAcento (@texto VARCHAR(250))
RETURNS VARCHAR(250)
AS BEGIN
    DECLARE @resultado VARCHAR(250)

    SET @resultado = @texto

	SET @resultado = REPLACE(@resultado, 'ã', 'a')
	SET @resultado = REPLACE(@resultado, 'á', 'a')
	SET @resultado = REPLACE(@resultado, 'â', 'a')
	SET @resultado = REPLACE(@resultado, 'à', 'a')
	SET @resultado = REPLACE(@resultado, 'ä', 'a')
	SET @resultado = REPLACE(@resultado, 'é', 'e')
	SET @resultado = REPLACE(@resultado, 'è', 'e')
	SET @resultado = REPLACE(@resultado, 'ê', 'e')
	SET @resultado = REPLACE(@resultado, 'ë', 'e')
	SET @resultado = REPLACE(@resultado, 'í', 'i')
	SET @resultado = REPLACE(@resultado, 'ì', 'i')
	SET @resultado = REPLACE(@resultado, 'î', 'i')
	SET @resultado = REPLACE(@resultado, 'ï', 'i')
	SET @resultado = REPLACE(@resultado, 'ó', 'o')
	SET @resultado = REPLACE(@resultado, 'ò', 'o')
	SET @resultado = REPLACE(@resultado, 'õ', 'o')
	SET @resultado = REPLACE(@resultado, 'ô', 'o')
	SET @resultado = REPLACE(@resultado, 'ö', 'o')
	SET @resultado = REPLACE(@resultado, 'ú', 'u')
	SET @resultado = REPLACE(@resultado, 'ù', 'u')
	SET @resultado = REPLACE(@resultado, 'û', 'u')
	SET @resultado = REPLACE(@resultado, 'ü', 'u')
	SET @resultado = REPLACE(@resultado, 'ç', 'c')

	SET @resultado = REPLACE(@resultado, 'Ã', 'A')
	SET @resultado = REPLACE(@resultado, 'Á', 'A')
	SET @resultado = REPLACE(@resultado, 'Â', 'A')
	SET @resultado = REPLACE(@resultado, 'À', 'A')
	SET @resultado = REPLACE(@resultado, 'Ä', 'A')
	SET @resultado = REPLACE(@resultado, 'É', 'E')
	SET @resultado = REPLACE(@resultado, 'È', 'E')
	SET @resultado = REPLACE(@resultado, 'Ê', 'E')
	SET @resultado = REPLACE(@resultado, 'Ë', 'E')
	SET @resultado = REPLACE(@resultado, 'Í', 'I')
	SET @resultado = REPLACE(@resultado, 'Ì', 'I')
	SET @resultado = REPLACE(@resultado, 'Î', 'I')
	SET @resultado = REPLACE(@resultado, 'Ï', 'I')
	SET @resultado = REPLACE(@resultado, 'Ó', 'O')
	SET @resultado = REPLACE(@resultado, 'Ò', 'O')
	SET @resultado = REPLACE(@resultado, 'Õ', 'O')
	SET @resultado = REPLACE(@resultado, 'Ô', 'O')
	SET @resultado = REPLACE(@resultado, 'Ö', 'O')
	SET @resultado = REPLACE(@resultado, 'Ú', 'U')
	SET @resultado = REPLACE(@resultado, 'Ù', 'U')
	SET @resultado = REPLACE(@resultado, 'Û', 'U')
	SET @resultado = REPLACE(@resultado, 'Ü', 'U')
	SET @resultado = REPLACE(@resultado, 'Ç', 'C')

    RETURN @resultado
END

Bom pessoal, por hoje é só.
Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

4 Responses

  1. Emerson disse:

    Bom dia!

    Mais fácil do que criar a função é utilizar um collate que não contenha acentos.
    Algo assim
    SELECT * FROM TABELA
    WHERE CAMPO LIKE ‘%ÁRVORE%’ COLLATE SQL_Latin1_General_CP1253_CI_AI

    Ou ainda utilizar o collate na função, em vez de tratar cada caractere individualmente.

  2. neilton nei disse:

    otimo post, funcionou perfeitamente.

Deixe uma resposta para Dan_AtilioCancelar resposta

Terminal de Informação