Problemas com comando SQL LIKE

Firebird

26/07/2012

Olá, utilizo Firebird 2.0, com Delphi 7, estou com dificuldades no seguinte, tenho uma tela de consulta de produtos, onde na minha tabela por exemplo tenho vários produtos e utilizo o seguinte comando SQL: SELECT * FROM PRODUTO WHERE DSPRODUTO LIKE %||:CAMPO||%, blz, ele traz as informações que preciso, mas estou com problemas na ordenação, por exemplo, tenho 03 produtos com a combinação BACIA, ele me traz dessa forma:
Codigo - DSPRODUTO
01 - ACUCAR COM BACIA
02 - COLUNA PARA BACIA
03 - BACIA NORMAL
mas o que o meu cliente quer que fique ordenado primeiro pela descrição digitada, onde ficaria assim:
Codigo - DSPRODUTO
03 - BACIA NORMAL
01 - ACUCAR COM BACIA
02 - COLUNA PARA BACIA
Não consegui encontrar um meio ainda de fazer, se houver alguém que possa me dar uma idéia de como resolver, ficaria muito grato!
Cristiano

Cristiano

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

26/07/2012

Como a descrição já vem com um número, acredito que você precise trazer no select apenas a parte da descrição que contém o texto e ordenar por esta coluna.
GOSTEI 0
Cristiano

Cristiano

26/07/2012

Olá, ali apenas postei com o código, mas são field a parte, um campo é Código, e outro é DSPRODUTO, e com o order by não fica como o desejado.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

26/07/2012

Você mandou ordenar pela descrição? Qual o resultado obtido?
GOSTEI 0
Anderson

Anderson

26/07/2012

Bom dia, tenta assim:

select *
from
(select P.*,
(case when P.DSPRODUTO like :CAMPO||% then 0 else 1 end)||P.DSPRODUTO as DSPRODUTO_TEMPORARIO
from PRODUTOS P
where P.DSPRODUTO like %||:CAMPO||%)
order by DSPRODUTO_TEMPORARIO;

A idéia é simples, colocar uma prioridade de ordem caso o nome inicie com a palavra utilizada na busca.
Abraços,

Anderson:.
GOSTEI 0
Cristiano

Cristiano

26/07/2012

Olá Joel, ele fica na ordenação normal do alfabeto, basicamente como listado no primeiro exemplo.

Olá Anderson, obrigado pelo dica, mas o comando Like no comando (case when P.DSPRODUTO like :CAMPO||% then 0 else 1 end) dá erro e portando, não consigo tb listar da forma desejada.

Se tiverem outra idéia de como poderei estar fazendo.
GOSTEI 0
Anderson

Anderson

26/07/2012

Ola Moacir, o código que passei (dados os devidos ajustes - testei em uma de minhas tabelas) funcionou no Firebird Classic v2.1.5.18496 64bits (Servidor CentOS Linux 64bits) executado pelo Flamerobin v0.9.3.2219 64bits unicode (Estação Windows 7 64 bits).

Sugiro que faça um teste primeiro em uma ferramenta de banco de dados (Flamerobin, IBExpert, IBConsole, etc.) e só depois porte o código para Delphi. Teoricamente, se rodar em um destes utilitários, deverá tambem funcionar no Delphi exceto se houver alguma incompatibilidade com o componente de acesso. Caso execute o comando pelo Flamerobin e não funcionar, poste uma mensagem com o comando na integra, a linha do erro e a mensagem retornada.

Abraços,

Anderson:.
GOSTEI 0
POSTAR