Tokenizar campo varchar utitilizando sql

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
carlostrajano
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 23 Abr 2008 2:22 pm
Localização: Paraiba

Pessoal,

Estou querendo fazer uma consulta onde preciso varrer um campo do banco. Assim: tenho um campo varchar com a seguinte string "joao manel da silva", então quero fazer um select pegando cada token desta string. tipo:
select id_pessoa from tb_pessoa
where [arrayDetoquens] like 'manel'

alguém tem alguma idéia?

Grato desde já.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Seria isso?

Selecionar tudo

select id_pessoa 
  FROM tb_pessoa 
where lower(teu_campo_string) like '%manel%';
qualquer coisa, manda ai.
carlostrajano
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 23 Abr 2008 2:22 pm
Localização: Paraiba

Mais ou menos,

é porque é o seguinte, estou implementando uma busca fonética, e para tal estou utilizando a função soundex() que tem no oracle, só que esta função só "fonetiza" a primeira palavra do varchar, então queria na verdade tokenizar o varchar para aplicar a função soundex para cada token. entendeu?
carlostrajano
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Qua, 23 Abr 2008 2:22 pm
Localização: Paraiba

Bom eu achei esse codigo:

SELECT LEVEL
, SUBSTR ( STRING_TO_TOKENIZE
, DECODE( LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1)
, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL)
- DECODE( LEVEL, 1, 1, INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL-1)+1)
)
FROM ( SELECT ‘&String_To_Tokenize’||’&Delimiter’ AS STRING_TO_TOKENIZE
, ‘&Delimiter’ AS DELIMITER
FROM DUAL
)
CONNECT
BY INSTR(STRING_TO_TOKENIZE, DELIMITER, 1, LEVEL) > 0
ORDER
BY LEVEL ASC ;


Mas não consegui utiliza-lo, alguém da um help?
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes