- Este tópico contém 10 respostas, 5 vozes e foi atualizado pela última vez 10 anos, 3 meses atrás por
rman.
-
AutorPosts
-
27 de abril de 2011 às 12:04 am #98978
leo_jf
ParticipantePessoall,
Preciso buscar em uma coluna de nome quem tem nomes abreviados. Exemplo: Leonardo n. Ou Leonardo N.
Alguem teria uma sugestao?27 de abril de 2011 às 12:10 am #98979leo_jf
ParticipanteRetificando:
Leonardo N. Souza ou Leonardo N Souza.
Se tiver apenas um caracter após o nome também tenho que buscar.27 de abril de 2011 às 2:18 am #98980Ishii
ParticipanteOlá,
Se for Oracle 10g ou superior você poderia usar as expressões regulares:
select * from tabela
where regexp_like (coluna_nome,'^[[:alpha:]]([[:space:]]{1})[[:alpha:]]')
or regexp_like (coluna_nome,'^[[:alpha:]]([[:punct:]]{1})[[:alpha:]]')
Essa query traria os nomes abreviados ou com uma letra, por exemplo José da Silva E Castro retornaria mas por causa do E que ele entenderia como abreviação…
Mas acho que isso já serviria para iniciar…
[]s Ishii
27 de abril de 2011 às 6:35 am #98984leo_jf
ParticipanteOlas Ishii,
seria exatamente isso que preciso, mas o oracle aqui, infelizmente, ainda é o 9i…
27 de abril de 2011 às 4:35 pm #98986leo_jf
ParticipanteIshii,
Instalei localmente o oracle 10g, e fiz o teste com a query abaixo, mas não funcionou.
Sabe dizer se falta alguma informação na query?27 de abril de 2011 às 6:29 pm #98989burga
ParticipanteTomando a liberdade de modificar o código do Ishii, tente desta forma:
select * from tabela
where regexp_like (coluna_nome,'(^|[[:space:]]|[[:punct:]])([[:alpha:]]{1})([[:space:]]|[[:punct:]]|$)');27 de abril de 2011 às 9:00 pm #98992leo_jf
ParticipanteBurga,
Funcionou perfeito.
Vou analisar o código do Ishii e ver o que difere, e depois posto.
Muito obrigado a todos pela ajuda.Infelizmente aqui é oracle 9i, mas pelo que vejo o 10g tem vários recursos interessantes, e práticos.
27 de abril de 2011 às 11:14 pm #98997burga
ParticipantePro 9i, uma solução super tosca mas que funciona é fazer algo do tipo:
WITH t AS (
SELECT
TRANSLATE(UPPER(nome),'BCDEFGHIJKLMNOPQRSTUVXZWY.',
'AAAAAAAAAAAAAAAAAAAAAAAAA ')
teste,
id,
nome
FROM tabela)
SELECT * FROM t
WHERE teste like 'A %'
OR teste like '% A'
OR teste like '% A %';Substituir todos os caracteres por um só, e todos os tipos de pontos por espaço e buscar pelo caractere isolado, bom só pra poupar um pouco de código e se for executada uma única vez… Pelo menos poupa de ficar escrevendo intermináveis OR LIKE OR LIKE OR LIKE…
28 de abril de 2011 às 4:38 am #98998leo_jf
ParticipanteFala Burga, blz?
A solução com regexp_like funcionou perfeitamente, mas amanha vou testar com o like.
Obrigado pela ajuda.18 de novembro de 2015 às 8:46 pm #107911FELIPE SILVA
Participantea
19 de novembro de 2015 às 3:18 pm #107918rman
Participante@FELIPE SILVA
Pode ser feito assim:
...
WHERE TESTE LIKE '%000777793%'
OR TESTE LIKE '%0000555530%'
OR TESTE LIKE %000444439%'
-
AutorPosts
- Você deve fazer login para responder a este tópico.