APDSJ!
Função (store function) para remover acentos em SQL Server 2005, SQL Server 2008 e SQL Server 2012.
Funciona para maiúsculas e minúsculas e com banco de dados em latin1, mas pode ser adaptada facilmente para outro encoding.
Espero ter ajudado!
IF EXISTS ( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usf_rm_accent_pt_latin1]') AND type IN (N'FN') ) DROP FUNCTION usf_rm_accent_pt_latin1; GO CREATE FUNCTION usf_rm_accent_pt_latin1 (@txt varchar(max)) RETURNS varchar(max) -- Nome Artefato/Programa..: usf_rm_accent_pt_latin1.sql -- Autor(es)...............: Emerson Hermann (emersonhermann [at] gmail.com) O Peregrino (http://www.emersonhermann.blogspot.com) -- Data Inicio ............: 26/11/2011 -- Data Atualizacao........: 08/10/2012 -- Versao..................: 0.03 -- Compilador/Interpretador: T-SQL (Transact SQL) -- Sistemas Operacionais...: Windows -- SGBD....................: MS SQL Server 2005/2008/2012 -- Kernel..................: Nao informado! -- Finalidade..............: store function para remover acentos maiúsculos e minúsculos em latin1 pt -- OBS.....................: só funciona para banco configurado com o collate latin1, para saber qual o collate do seu banco execute essa query -- ........................: SELECT DatabasePropertyEx(db_name(),'Collation'); -- BEGIN DECLARE @txt0 varchar(max) --caixa baixa SET @txt0 = replace(@txt COLLATE Latin1_General_BIN, char(225),'a') --SELECT 'á',ASCII('á'); --225 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(224),'a') --SELECT 'à',ASCII('à'); --224 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(227),'a') --SELECT 'ã',ASCII('ã'); --227 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(226),'a') --SELECT 'â',ASCII('â'); --226 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(233),'e') --SELECT 'é',ASCII('é'); --233 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(232),'e') --SELECT 'è',ASCII('è'); --232 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(234),'e') --SELECT 'ê',ASCII('ê'); --234 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(237),'i') --SELECT 'í',ASCII('í'); --237 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(236),'i') --SELECT 'ì',ASCII('ì'); --236 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(238),'i') --SELECT 'î',ASCII('î'); --238 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(243),'o') --SELECT 'ó',ASCII('ó'); --243 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(242),'o') --SELECT 'ò',ASCII('ò'); --242 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(244),'o') --SELECT 'ô',ASCII('ô'); --244 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(245),'o') --SELECT 'õ',ASCII('õ'); --245 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(250),'u') --SELECT 'ú',ASCII('ú'); --250 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(249),'u') --SELECT 'ù',ASCII('ù'); --249 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(251),'u') --SELECT 'û',ASCII('û'); --251 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(252),'u') --SELECT 'ü',ASCII('ü'); --252 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(231),'ç') --SELECT 'ç',ASCII('ç'); --231 -- caixa alta SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(193),'A') --SELECT 'Á',ASCII('Á'); --193 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(192),'A') --SELECT 'À',ASCII('À'); --192 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(194),'A') --SELECT 'Â',ASCII('Â'); --194 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(195),'A') --SELECT 'Ã',ASCII('Ã'); --195 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(201),'E') --SELECT 'É',ASCII('É'); --201 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(200),'E') --SELECT 'È',ASCII('È'); --200 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(202),'E') --SELECT 'Ê',ASCII('Ê'); --202 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(205),'I') --SELECT 'Í',ASCII('Í'); --205 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(204),'I') --SELECT 'Ì',ASCII('Ì'); --204 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(206),'I') --SELECT 'Î',ASCII('Î'); --206 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(211),'O') --SELECT 'Ó',ASCII('Ó'); --211 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(210),'O') --SELECT 'Ò',ASCII('Ò'); --210 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(212),'O') --SELECT 'Ô',ASCII('Ô'); --212 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(213),'O') --SELECT 'Õ',ASCII('Õ'); --213 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(218),'U') --SELECT 'Ú',ASCII('Ú'); --218 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(217),'U') --SELECT 'Ù',ASCII('Ù'); --217 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(219),'U') --SELECT 'Û',ASCII('Û'); --219 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(220),'U') --SELECT 'Ü',ASCII('Ü'); --220 SET @txt0 = replace(@txt0 COLLATE Latin1_General_BIN,char(199),'C') --SELECT 'Ç',ASCII('Ç'); --199 RETURN (@txt0) END GO -- Exemplo de uso da function -- Ex.: 01 - Removendo acentos nas consultas -- SELECT dbo.usf_rm_accent_pt_latin1('café, Sofá, pé,caÇa, CAÇA, aviões, sapê, à, sítio, Avião, LÂMPADA, mesa, cadeira, AVIÕES'); -- Retorno: cafe, Sofa, pe,caCa, CACA, avioes, sape, a, sitio, Aviao, LAMPADA, mesa, cadeira, AVIOES -- Ex.: 02 - Removendo acentos no campo obs da tabela1 -- UPDATE tabela1 SET obs = dbo.usf_rm_accent_pt_latin1(obs); --
O Peregrino agradece o acesso, tenha um bom trabalho!
:)
Obrigado, me ajudou muito.
ResponderExcluirVLWZ
Seja feliz!
Excluirc cedilha minúsculo não está ok.
ResponderExcluirConfere?
Está correto, "Ç" é convertido para "C" e "ç" é convertido "c", conforme query abaixo:
ResponderExcluirSELECT char(231), char(199);
Mas se não lhe convier é só remover a linha 44 e 64 e adaptar para a sua necessidade.