Ajuda Sql

3 respostas
Anderson.ti

Olá, tenho uma tela com um campo de busca, quero fazer o seguinte

ex: no meu banco tenho um cara chamado “coletor” quando digito coletor trago todos os caras que tem coletor no meu banco, até ai tudo ok, e se digitar “seringa” traz todos os caras também, ok, mas se digitar no campo de busca “coletor seringa” ele não traz nenhum nem outro.

antes funcionava assim

if(pItemDeParaVO.getCodFiltroReferenciado() != null && pItemDeParaVO.getCodFiltroReferenciado().trim().length() > 0 ){

sQuery.append(" AND ((upper(item_de_para.cod_item_prestadora) like upper(ltrim(’%"+pItemDeParaVO.getCodFiltroReferenciado().toUpperCase()+"%’)) OR  “);

sQuery.append(”	  upper(item_de_para.des_item_prestadora) like upper(’%"+pItemDeParaVO.getCodFiltroReferenciado().toUpperCase()+"%’)))	");

}
e fiz essa modificação

[b]

if(pItemDeParaVO.getCodFiltroReferenciado() != null && !"".equals(pItemDeParaVO.getCodFiltroReferenciado().trim())){

StringTokenizer tokenizer = new StringTokenizer(pItemDeParaVO.getCodFiltroReferenciado(), " ");

String filtroNom = “”;

String filtroCod = “”;
while(tokenizer.hasMoreTokens()) {
				String palavra = tokenizer.nextToken();
				
				if(!"".equals(filtroNom)) {
					filtroNom += "\n AND ";
				}
				filtroNom += "\n  (upper(item_de_para.cod_item_prestadora) like upper(ltrim('%"+palavra+"%'))";
				
				if(!"".equals(filtroCod)) {
					filtroCod += "\n OR ";
				}
				filtroCod += "\n  upper(item_de_para.des_item_prestadora) like upper('%"+palavra+"%')) ";
				
			}
			sQuery.append("\n  AND (  " + filtroNom + " OR " + filtroCod + " ) " + "\n");
			
		}

[/b]

e ainda não estou conseguindo o resultado esperado, alguém pode ajudar ?
desde já obrigado

3 Respostas

T

Em vez de usar LIKE, use o recurso de Full-text-search de seu banco. Dá resultados melhores e mais rápidos que um LIKE, exceto se houver muitos poucos dados para serem indexados.
O Full text search é capaz de interpretar expressões de busca razoavelmente complicadas (como as que você está querendo usar).

Anderson.ti

Obs: quero trazer tudo que estiver relacionado ao que foi digitado caso exista

Anderson.ti

Resolvi desse jeito

if(pItemDeParaVO.getCodDes() != null && !"".equals(pItemDeParaVO.getCodDes().trim())){
			StringTokenizer tokenizer = new StringTokenizer(pItemDeParaVO.getCodDes(), " ");
			String filtroNom = "";
			String filtroCod = "";
			
			while(tokenizer.hasMoreTokens()) {
				palavra = tokenizer.nextToken();
				
				if(!"".equals(filtroNom)) {
					filtroNom += "\n OR ";
				}
				filtroNom += "\n  (upper(item.des_item)) like upper('%"+palavra+"%')";
				
				if(!"".equals(filtroCod)) {
					filtroCod += "\n OR ";
				}
				filtroCod += "\n  to_char(item.cod_item) = ltrim('%"+palavra+"%') ";
				
			}
			
			strSQL.append("\n  AND (  " + filtroNom + " OR " + filtroCod + " ) " + "\n");
		}

valeu galera, um abraço

Criado 21 de outubro de 2008
Ultima resposta 22 de out. de 2008
Respostas 3
Participantes 2