Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal. Tenho uma base com uns 5.000 registros.
Quero fazer um código para aplicar acento em nomes que foram gravados sem sua respectiva acentuação.
Parte 1
Até consegui montar uma código para testes usando UPDATE e replace.
Mas da forma como criei, se peço para acentuar a string **Jose**, acaba acentuando também **Josevaldo** (pois ambos tem a string "jose")
Preciso de um código que pegue cada parte do nome (primeiro nome, nome do meio e último nome) da pessoa e verifique se há o valor passível de aplicar a acentuação.
Exemplo:
Jose Amancio dos Santos - teria que aplicar acento no Jose e em Amancio.
Josevaldo Pires Silva - **não deve** **aplicar acento **em Josevaldo
**Parte 2**
Como isso será uma rotina, quero ter um "dicionário" de nomes gravados da forma correta (acentuados) para serem usados na rotina de que aplicaria a acentuação.
Queria ver sugestões de como montar esse "dicionário". Seria um array? Seria ler uma tabela?
Podem ajudar?
Valew!Olá @Omar~
Bom, a parte do "dicionário" dá pra ver depois...posso ir me virando rodando o código na mão e alterando o nomes (depois penso em automatizar).
Preciso mesmo é montar o replace que analise separadamente as partes da string (primeiro nome, nome do meio e último nome), essa seria a primeira prioridade.
1) Entendo que precisaria fazer um select usando LIKE para encontrar palavras como jose, natalia, katia e etc.
Nesse ponto passaria o valor por variável para o WHERE do select.
2) Depois, pegando 1 registro por vez, dos que forem retornados do select, contar os espaços existentes na string para saber quantas análises na string precisam ser feitas.
3) Depois, usando num loop (iterando na mesma quantidade de espaços identificados no passo2), colocar cada pedaço da string numa variável e fazer comparação (um IF usando valor do passo 1) pra saber se precisa ser acentuada.
4) Aplicar o replace no registro
Acho que esse seria um caminho...mas não sei como montar essa separação da string e depois criar o loop. Seria nisso que mais preciso de ajuda.Buenas tchê.
Viajei legal agora nessa tua demanda, mas não seria simples validar os nomes com os espaços?
Isso, no caso do José, resolveria o problema do Josevaldo.
Tu tem como passar o script de replace q tu testou? Estou tentando montar algo aqui (em Oracle), mas agilizaria se já tivesse o q tu fez aí.
Olá @Marlon Pacheco!
Segue o SQL "embrionário"
DECLARE @varNome varchar(120),
DECLARE @varNomeCorreto varchar(120)
SET @varNome = 'Jose'
SET @varNomeCorreto = 'José'
UPDATE minhaTabela
SET
nome = REPLACE(nome,
@varNome,
@varNomeCorreto)
WHERE
nome LIKE '%'+@varNome+'%' ;
Isso funciona. Mas com os problemas que citei no post.
Preciso criar uma inteligência nisso para atingir o objetivo que descrevi acima.bom dia
meio gambiarra mas acho que é um caminho
José no meio do nome
nome = replace (nome, "jose ", "josé ")
o espaço ele indica que o nome "acabou" e realmente é só josé
Jose como último sobrenome (Josevaldo Jose)
select nome = left(nome, len(nome) - 4) where right(nome,4) = 'jose'
Vish cara, acho que não dar para aplicar uma regra nessa situação não eim! Sei lá, mas não consigo pensar em nada para suprir isso.
A única coisa que me vem em mente é pré determinar os nomes em um array então comparar índices, assim assumindo seus valores.
Veja isso em PHP:
<?php
$nomes = [
'Jose' => 'José',
'Joao' => 'João'
if (array_key_exists($nome, $nomes)) {
echo $nomes[$nome];
} else {