Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) (Resolvido)Problemas com extract


João Paulo Taraciuk

Pergunta

Olá, estou encontrando problemas para realizar uma consulta que filtre por mes e por ano, o meu select está assim

select id_movimentacao, cliente,descricao,valor,sum(valor)as total,data 
from caixa where (operacao="E")and(extract(year from data)= :b)and(extract(month from data)= :a) group by data
ParamByName('b').value:=strtoint(edit1.text);
ParamByName('a').value:=strtoint(edit2.text);

Mas se eu coloco para extrair o ano e o mês no mesmo select, não dá certo, e se eu coloco para extrair apenas uma das duas datas para fazer a comparação, aí dá certinho.

O que eu poderia fazer para contornar este probleminha.

Eu utilizo Delphi 7, MySql 3.23 e Zeos 6.51

Editado por João Paulo Taraciuk
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'João Paulo Taraciuk'!

Por padrão o mysql usa a data no formato aaaa-mm-dd, o que facilita muito na hora de desmembrar uma data.

Conform o que você demonstrou existem duas soluções para o problema.

A primeira (a que recomando) é que você compare a data com outra data asim:

Se estou buscando o mes de agosto de 2008, então meu parâmetro será:

b = 2008-08-01

select id_movimentacao, cliente,descricao,valor,sum(valor)as total,data 
from caixa where (operacao="E") and (data >= :b) group by data
ParamByName('b').value:= FormatDateTime('yyyy-mm-dd', StrToDate(edit1.text));
Este sistema de busca permite qque você possa criar um índice por data e, assim, evitar TABLE SCAN. A segunda forma, que não recomendo, pois sempre vai ocasionar em TABLE SCAN, é usar as funções YEAR e MONTH, que estão no manual do MySQL de sua versão, tal como no exemplo abaixo:
select id_movimentacao, cliente,descricao,valor,sum(valor)as total,data 
from caixa where (operacao="E")and (YEAR(data) = :b)and( MONTH(data) = :a) group by data
ParamByName('b').value:=strtoint(edit1.text);
ParamByName('a').value:=strtoint(edit2.text);

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, da maneira que você indicou deu certo a pesquisa, aí como eu vou utilizar somente o mês e o ano, pois a pesquisa é mensal e não necessita colocar dia, estou tentando colocar somente o mês e o ano em um edit ou mask edit.

Tentei dessa maneira

select id_movimentacao, cliente,descricao,valor,sum(valor)as total, data 
from caixa where (operacao="E")and (data like :a) group by data')
ParamByName('a').value:=MaskEdit1.text;

Como eu poderia fazer este select, onde o usuário digitasse somente o mês e o ano ?

No exemplo que eu passei, eu estava utilizando dois edits, aí sua segunda dica daria certinho, mas vou ter que fazer em somente um edit ou maskedit.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'João Paulo Taraciuk'!

Como eu poderia fazer este select, onde o usuário digitasse somente o mês e o ano ?

No exemplo que eu passei, eu estava utilizando dois edits, aí sua segunda dica daria certinho, mas vou ter que fazer em somente um edit ou maskedit.

Você pode usar mask edit para receber ano-mes no formato 'aaaa-mm' (verificando se mm está entre 01 e 12, para evitar erro) e concatenar o dia ('-dd') para obter o formato 'aaaa-mm-dd' onde dd seria 01, ou 30, ou 31, ou 29 ou 28 dependendo do tipo de comparação que você quizer fazer.

Assim você poderá usar o primeiro exemplo que passei.

Sei que o dia não é importante para você, mas estou pensando bem à frente, quando seu sistema tiver muitos registros e ficar difícil de pesquisar varrendo toda a tabela (table scan).

Link para o comentário
Compartilhar em outros sites

  • 0

Funcionou utilizando a primeira dica

select id_movimentacao, cliente,descricao,valor,sum(valor)as total,data 
from caixa where (operacao="E") and (data = :b) group by data
ParamByName('b').value:= FormatDateTime('yyyy-mm-dd', StrToDate(MaskEdit1.text));

Obrigado Denis Courcy.

Abraço!!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...