Puro SQL

Chipy

Power Member
Boas,

Estou a precisar de ajuda com um problema:

Tenho uma Base de dados em SQL2005 com milhares de registos, eu preciso de tirar todos os acentos das palavras dos registos (´, `, ~, ^) e substituir o "ç" pelo "c"...Penso que com uma( ou mais) querys isto dê para fazer ( mas ainda sou um novato com o SQL) :(

Alguem me podia dar uma mão???
 
Não conheço a sintaxe do SQL2005, mas em Oracle pode-se fazer assim:

UPDATE nome_da_tabela
SET nome_da_coluna=TRANSLATE(nome_da_coluna,'âÂêÊîÎôÔûÛãÃõÕáÁéÉíÍóÓúÚàÀÈèÌìÒòùÙñÑabcdefghijklmnopqrstuvwxyzçÇ','AAEEIIOOUUAAOOAAEEIIOOUUAAEEIIOOUUNNABCDEFGHIJKLMNOPQRSTUVWXYZCC');

Neste caso retira as cedilhas e acentos e converte para maiúsculas.
 
Chipy disse:
Boas,

Estou a precisar de ajuda com um problema:

Tenho uma Base de dados em SQL2005 com milhares de registos, eu preciso de tirar todos os acentos das palavras dos registos (´, `, ~, ^) e substituir o "ç" pelo "c"...Penso que com uma( ou mais) querys isto dê para fazer ( mas ainda sou um novato com o SQL) :(

Alguem me podia dar uma mão???


Não sei se te ajudará, mas se configurares a base de dados para caracteres portugueses, consegues fazer buscas em strings onde os acentos e "ç" são tratados como se não tivessem acentos.
 
Depende do colation que usas na tua BD (ou tabela da BD). Existem vários collations, uns que são sensiveis (ou insensiveis) se as letras são maiusclas ou minusclas, e também existem collation rpara isso. PRocura no SQL BOL que encontras isso.
 
Já consegui obrigado!! :)

A rotina é a seguinte ( dá sempre jeito)


Go
set quoted_identifier OFF
Go

declare @tab as varchar(500), @col as varchar(500), @fnd as varchar(500), @str as varchar(8000), @sel varchar(8000);
declare c1 cursor for select a.name tab, b.name col from sysobjects a join syscolumns b on (a.id=b.id) where a.type='u' order by 1,2
open c1
fetch next from c1 into @tab, @col
while (@@fetch_status <> -1)
begin
if (@@fetch_status <> -2)
begin
print char(13) + char(10) + 'COLUNA: ' + @col + ' DA TABELA: ' + @tab

-- acentuação MINUSCULA (')
set @str="update %s set %s = replace( %s, 'á', 'a')"
exec MASTER.DBO.xp_sprintf @str OUTPUT, @str, @tab, @col, @col
exec (@str)
set @str="update %s set %s = replace( %s, 'ç', 'c')"
exec MASTER.DBO.xp_sprintf @str OUTPUT, @str, @tab, @col, @col
exec (@str)

set @str="update %s set %s = replace( %s, 'Ç', 'C')"
exec MASTER.DBO.xp_sprintf @str OUTPUT, @str, @tab, @col, @col
exec (@str)

end
fetch next from c1 into @tab, @col
end
close c1
deallocate c1
return
go



Esta rotina está a mudar "ç" para "c" e "á" para "a"....

Se quiserem mudar todos as acentos de todas as letras (como era o meu caso) basta repetir as instruções e mudar para a letra pretendida :)
Loucura!!!
 
Última edição:
Back
Topo