1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Puro SQL

Discussão em 'Programação' iniciada por Chipy, 2 de Agosto de 2006. (Respostas: 4; Visualizações: 1033)

  1. Chipy

    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???
     
  2. Lagaffe

    Lagaffe Power Member

    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.
     
  3. SoundSurfer

    SoundSurfer Power Member


    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.
     
  4. XiriX

    XiriX Banido

    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.
     
  5. Chipy

    Chipy Power Member

    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: 7 de Agosto de 2006

Partilhar esta Página