Ajuda SQL consulta datas por dia e mes

31/03/2003

0

Ola Pessoal,

Eu pedi ajuda ao fórum para fazer uma consulta entre datas, usando apenas o IF. Tenho 2 maskedit, um com a data final e outro com a data inicial, sendo que eu irei digitar apenas o dia e o mes que eu gostaria de consultar. Com a ajuda de um colega do forum, a pesquisa deu certo usando este código:

var
d1, d2, d3, m1, m2, m3, a1, a2, a3: word; (onde d=dia, m=mes, a=ano e 1 = data inicial, 2=data final, 3=data da tabela)

decodedate(strtodate(data1.text),a1,m1,d1);
decodedate(strtodate(data2.text),a2,m2,d2);
tabela.first;
while not tabela.eof do
begin
decodedate([campo].asdatetime,a3,m3,d3);
if ((d3>=d1) and (m3>=m1)) and ((d3<=d2) and (m3<=m2)) then
begin
[faça o que quiser];
end;
next;
end;

EditMask: __/__ (nao está no formato date)
Banco: DBF
Delphi:6.0


Aproveitando, gostaria de saber como ficaria o código para consultar pelo dia e o mes entre duas datas, datainicial e data final em sql.

Obrigado

Vivian


Anonymous

Anonymous

Responder

Posts

31/03/2003

Anonymous

Com instrução SQL:
´select <Campos a selecionar> from <Nome da Tabela>
where day(<Campo data>) >= :Dia1 and month(<Campo data>) >= :Mes and day(<Campo data>) <= :Dia2 and month(<Campo data>) <=:Mes2´

Query.ParambyName(´Dia1´).AsInteger := StrToInt(Copy(MaskEditI.Text,1,2);
Query.ParambyName(´Mes1´).AsInteger := StrToInt(Copy(MaskEditI.Text,4,2);
Query.ParambyName(´Dia2´).AsInteger := StrToInt(Copy(MaskEditF.Text,1,2);
Query.ParambyName(´Mes2´).AsInteger := StrToInt(Copy(MaskEditF.Text,4,2);
Query.Open;

Irá funcionar

Ez


Responder

22/03/2017

Fabricio Gomes

Boa bia amigos. Bem tentei fazer esta consulta mas apresento a seguinte msg...

invalid use of keyword. token day(data)

Código:

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select * from result21 where cast(data as date) day(data) >= :Dia1 and month(data) >= :Mes1 and day(data) <= :Dia2 and month(data) <=:Mes2');
Query1.ParambyName('Dia1').AsInteger := StrToInt(Copy(MaskEdit1.Text,1,2));
Query1.ParambyName('Mes1').AsInteger := StrToInt(Copy(MaskEdit1.Text,4,2));
Query1.ParambyName('Dia2').AsInteger := StrToInt(Copy(MaskEdit2.Text,1,2));
Query1.ParambyName('Mes2').AsInteger := StrToInt(Copy(MaskEdit2.Text,4,2));
Query1.Open;


o que poderia ser ?
Responder

22/03/2017

Luiz Santos

Fabricio.

Não sei bem como é no Delphi, mas essa parte aqui não faz muito sentido:


Query1.SQL.Add('Select * from result21 where cast(data as date) day(data) >= :Dia1 and month(data) >= :Mes1 and day(data) <= :Dia2 and month(data) <=:Mes2');



Talvez devesse ser assim:


Query1.SQL.Add('Select * from result21 where day(cast(data as date) ) >= :Dia1 and month(cast(data as date) ) >= :Mes1 and day(cast(data as date) ) <= :Dia2 and month(cast(data as date)) <=:Mes2');



Teste e diga se funcionou.

Grande abraço
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar