GARANTIR DESCONTO

Fórum Problemas com comando SQL LIKE #420566

26/07/2012

0

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

Responder

Posts

26/07/2012

Joel Rodrigues

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.
Responder

Gostei + 0

26/07/2012

Cristiano

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.
Responder

Gostei + 0

26/07/2012

Joel Rodrigues

Você mandou ordenar pela descrição? Qual o resultado obtido?
Responder

Gostei + 0

27/07/2012

Anderson

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:.
Responder

Gostei + 0

27/07/2012

Cristiano

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.
Responder

Gostei + 0

27/07/2012

Anderson

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:.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar