Existem várias formas para resolver esses casos. Podemos criar uma procedure ou função com uma estrutura do tipo DE/PARA e desenvolver um código que captura a informação passada como parâmetro, lêr cada caracter dessa expressão e faz a troca de acordo com a estrutura DE/PARA.
O processo consiste em fazer a troca de um caracter acentuado por outro caracter sem o acento.
A proposta aqui é mostra a utilização do comando COLLATE para fazer a troca dos caracteres acentuados. Seja o exemplo:
Declare @cExpressao varchar(30)
Set @cExpressao = 'aeiouáéíóúàèìòòâêîôûãõäëïöüç'
Select @cExpressao collate sql_latin1_general_cp1251_ci_as
------------------------------
aeiouaeiouaeiooaeiouaoaeiouc
(1 row(s) affected)
Declare @cExpressao varchar(30)
Set @cExpressao = 'AEIOUÁÉÍÓÚÀÈÌÒÒÂÊÎÔÛÃÕÄËÏÖÜÇ'
Select @cExpressao collate sql_latin1_general_cp1251_ci_as
------------------------------
AEIOUAEIOUAEIOOAEIOUAOAEIOUC
(1 row(s) affected)
Podemos criar uma função que contém a regra acima, conforme exemplo abaixo:
Create Function fnTiraAcento (@cExpressao varchar(100))
Returns varchar(100)
as
Begin
Declare @cRetorno varchar(100)
Set @cRetorno = @cExpressao collate sql_latin1_general_cp1251_cs_as
Return @cRetorno
End
GO
Declare @cExpressao varchar(30)
Set @cExpressao = 'AEIOUÁÉÍÓÚÀÈÌÒÒÂÊÎÔÛÃÕÄËÏÖÜÇ'
Select dbo.fnTiraAcento( @cExpressao )
Set @cExpressao = 'aeiouáéíóúàèìòòâêîôûãõäëïöüç'
Select dbo.fnTiraAcento( @cExpressao )
----------------------------
AEIOUAEIOUAEIOOAEIOUAOAEIOUC
(1 row(s) affected)
----------------------------
aeiouaeiouaeiooaeiouaoaeiouc
(1 row(s) affected)
Se voce tem informações em uma coluna do tipo nchar e nvarchar , voce deve passar os dados para um tipo char e varchar. Exemplo:
Declare @cExpressao nvarchar(30)
Set @cExpressao = 'aeiouáéíóúàèìòòâêîôûãõäëïöüç'
Select @cExpressao collate sql_latin1_general_cp1251_ci_as
------------------------------
aeiouáéíóúàèìòòâêîôûãõäëïöüç
(1 row(s) affected)
Não ocorreu a troca dos acentos. Fazendo a conversão implícita do tipo unicode, voce consegue fazer a troca dos acentos.
Declare @cExpressao nvarchar(30)
Declare @cExpr varchar(30)
Set @cExpressao = 'aeiouáéíóúàèìòòâêîôûãõäëïöüç'
Set @cExpr = @cExpressao
Select @cExpr collate sql_latin1_general_cp1251_ci_as
------------------------------
aeiouaeiouaeiooaeiouaoaeiouc
(1 row(s) affected)
Utilizando a função criada no exemplo anterior, não temos a necessidade de fazer a conversão.
Como o parametro da função não é do tipo unicode, no momento da passagem a expressão caracter, ocorre a conversão implícita.
Declare @cExpressao nvarchar(30)
Set @cExpressao = 'aeiouáéíóúàèìòòâêîôûãõäëïöüç'
Select dbo.fnTiraAcento( @cExpressao )
----------------------------
aeiouaeiouaeiooaeiouaoaeiouc
(1 row(s) affected)
O Collate utilizado nesse exemplo (sql_latin1_general_cp1251_cs_as) foi escolhido entre 315 'collates' existente no SQL SERVER 2005 que fizeram a conversão dos conjuntos de caracteres acima.
A relação de collate é obtida atraves de função ::fn_helpcollations()
select * from ::fn_helpcollations()
Para maiores detalhes sobre COLLATE, consulte o BOL do SQLServer. Abaixo segue link sobre o assunto:
http://imasters.uol.com.br/artigo/262
Nenhum comentário:
Postar um comentário