Página 1 de 1
Consultar por determinada palavra
Enviado: Seg, 13 Fev 2012 12:50 pm
por PericlesAlmeida
Senhores, estou tendo um pequeno problema de desempenho na consulta baixo:
Selecionar tudo
SELECT COUNT(DISTINCT SEQ)
FROM tabela
WHERE (
( REGEXP_LIKE(DSC, 'gado','i')) AND
NOT REGEXP_LIKE(DSC, '[a-z0-9;]gado','i') AND
NOT REGEXP_LIKE(DSC, 'gado[a-z0-9;]','i'))
Alguém tem uma sugestão para como realizar essa consulta, que tem como objetivo consultar uma determinada "palavra" que pode estar no começo, no fim ou no meio de uma "frase".
Re: Consultar por determinada palavra
Enviado: Seg, 13 Fev 2012 12:59 pm
por RafaelFantin
Tente assim:
Selecionar tudo
SELECT COUNT(DISTINCT SEQ)
FROM tabela
WHERE dsc like '%gado%'
Re: Consultar por determinada palavra
Enviado: Seg, 13 Fev 2012 1:01 pm
por PericlesAlmeida
Dessa maneira RafaelFantin vai retornar toda a string que possuir "gado" por exemplo "apagado", "obrigado"e isso não me interessa.
Mesmo assim vlw
Re: Consultar por determinada palavra
Enviado: Seg, 13 Fev 2012 1:34 pm
por DanielNN
Seu problema é o desempenho correto? e não que esta consulta esteja com erro?
Re: Consultar por determinada palavra
Enviado: Seg, 13 Fev 2012 1:40 pm
por Trevisolli
Brother,
Se essa palavra (gado), levar espaços em branco do lado direito e, esquerdo, poderia tentar assim:
Selecionar tudo
with sl as (
select 'abcde gado 1 fghij' as nome
from dual
union
select 'defgh 2 apgagado ijklm' as nome
from dual
union
select 'nopqrs obrigado 3 tuvxyz' as nome from dual )
select count(distinct nome)
from sl
where sl.nome like '% gado %'
Veja se lhe ajuda, senão, posta pra gente.
Re: Consultar por determinada palavra
Enviado: Seg, 13 Fev 2012 2:02 pm
por PericlesAlmeida
A palavra leva espaços ao lado se estiver no meio da frase por exemplo:
"José gosta de gado amarelo."
ou não tem espaço no começo:
"Gado bom é nelore."
ou não espaço no fim
"João gosta de gado."
E sim é problema de DESEMPENHO.
Re: Consultar por determinada palavra
Enviado: Seg, 13 Fev 2012 3:40 pm
por DanielNN
Cara,
tenta como o seguinte:
Selecionar tudo
SELECT COUNT(*)
FROM ( select 'abcde gado 1 fghij' as nome from dual
union
select 'defgh 2 apgagado ijklm' as nome from dual
union
select 'nopqrs obrigado 3 tuvxyz' as nome from dual
union
select 'gado 4 tuvxyz' as nome from dual
union
select 'gadogado 5 tuvxyz' as nome from dual
union
select 'nopqrs 5 gadogado' as nome from dual
union
select 'nopqrs 5 obri gado' as nome from dual )
WHERE ' ' || lower(NOME) || ' ' like '% gado %'
OBS: um truquezim para sair de REG_EXP.
Re: Consultar por determinada palavra
Enviado: Seg, 13 Fev 2012 4:19 pm
por PericlesAlmeida
Massa Noctifero, para campo texto essa consulta é perfeita.
Mas tenho um probleminha
, a consulta acima é realizada em campos CLOB que normalmente é um HTML, portanto não é só colocar um espaço...
Estou começando a pensar em desconsiderar o começo e fim de frases...
Re: Consultar por determinada palavra
Enviado: Seg, 13 Fev 2012 4:41 pm
por DanielNN
Acredito que isso possa ajudar :
http://asktom.oracle.com/pls/asktom/f?p ... 7980988799
O problema é que pode deixar mais lento fazendo essa conversão, mas vale tentar.
Re: Consultar por determinada palavra
Enviado: Seg, 13 Fev 2012 4:50 pm
por PericlesAlmeida
beleza, Noctifero vou dar uma olhada.
Por enquanto estou utilizando:
Se a palavra não estiver no começo nem no fim da frase eu encontro, a diferença de desempenho é estúpida a consulta anterior demorava 80 segundos essa demora de 7 a 10 segundos.
Obrigado a todos que contribuiram.