Como realizar esta consulta entre datas e horas?

SQL

Delphi

Firebird

26/02/2020

Olá boa tarde a todos, estou com um problema em minha consulta, eu tenho cadastro de ouvintes, e quero consultar quantos ouvintes participaram do dia a tal ao dia tal da hora tal a hora tal, só que a consulta que faço, elimina as participações de uma determinada hora, de todos os dias.

por exemplo, quero saber quantos ouvintes participaram de ontem do meio dia, até hoje 18 hrs, mas algo esta errado na minha consulta abaixo.

Só que com a consulta realizada, ele não mostra as gravações de ontem depois das 18 até meia noite, ele mostra as de ontem de meio dia as 18, e hoje ele mostra depois do meio dia até as 18..

O que seria?

          close;
          sql.Clear;
          sql.Add('select inscricao_id, inscricao_idouvinte, inscricao_idpromocao, ');
          sql.Add('inscricao_datacadastro, inscricao_horacadastro, tbouvinte.ouvinte_nome, ');
          sql.Add('tbouvinte.ouvinte_celular, tbouvinte.ouvinte_telefone from tbinscricao ');
          sql.Add('LEFT JOIN tbouvinte ');
          sql.Add('on(tbinscricao.inscricao_idouvinte = tbouvinte.ouvinte_id) ');
          sql.Add('WHERE inscricao_idpromocao like :pPromocao and ');
          sql.Add('inscricao_datacadastro BETWEEN :pData1 AND :pData2 ');
          sql.Add('and inscricao_horacadastro between :phora1 AND :phora2 ');
          sql.Add('ORDER BY inscricao_datacadastro, inscricao_horacadastro');
                  ParamByName('pPromocao').Value   := edt_promocao.EditValue;
                  ParamByName('pData1').Value      := dtinicial.Date;
                  ParamByName('pData2').Value      := dtfinal.Date;
                  ParamByName('pHora1').Value      := strtotime(timetostr(hrinicial.Time));
                  ParamByName('pHora2').value      := strtotime(timetostr(hrfinal.Time));
          open;


Agradeço a todos.
Júnior Pinheiro

Júnior Pinheiro

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

26/02/2020

tente assim:
close;
sql.Clear;
sql.Add('select inscricao_id, inscricao_idouvinte, inscricao_idpromocao, ');
sql.Add('inscricao_datacadastro, inscricao_horacadastro, tbouvinte.ouvinte_nome, ');
sql.Add('tbouvinte.ouvinte_celular, tbouvinte.ouvinte_telefone from tbinscricao ');
sql.Add('LEFT JOIN tbouvinte ');
sql.Add('on(tbinscricao.inscricao_idouvinte = tbouvinte.ouvinte_id) ');
sql.Add('WHERE inscricao_idpromocao like :pPromocao ');
sql.Add('and (inscricao_datacadastro >= :pData1 AND inscricao_horacadastro >= :phora1) ');
sql.Add('and (inscricao_datacadastro <= :pData2 AND inscricao_horacadastro <= :phora2) ');
sql.Add('ORDER BY inscricao_datacadastro, inscricao_horacadastro'
ParamByName('pPromocao').Value   := edt_promocao.EditValue;
ParamByName('pData1').Value      := dtinicial.Date;
ParamByName('pData2').Value      := dtfinal.Date;
ParamByName('pHora1').Value      := strtotime(timetostr(hrinicial.Time));
ParamByName('pHora2').value      := strtotime(timetostr(hrfinal.Time));
open;
GOSTEI 0
Júnior Pinheiro

Júnior Pinheiro

26/02/2020

Não funcionou, deu a mesma coisa.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

26/02/2020

veja se assim funciona:
close;
sql.Clear;
sql.Add('select inscricao_id, inscricao_idouvinte, inscricao_idpromocao, ');
sql.Add('inscricao_datacadastro, inscricao_horacadastro, tbouvinte.ouvinte_nome, ');
sql.Add('tbouvinte.ouvinte_celular, tbouvinte.ouvinte_telefone from tbinscricao ');
sql.Add('LEFT JOIN tbouvinte ');
sql.Add('on(tbinscricao.inscricao_idouvinte = tbouvinte.ouvinte_id) ');
sql.Add('WHERE inscricao_idpromocao like :pPromocao ');
sql.Add('and (inscricao_datacadastro+inscricao_horacadastro BETWEEN :pDtHr1 AND :pDtHr2) ');
sql.Add('ORDER BY inscricao_datacadastro, inscricao_horacadastro');
ParamByName('pPromocao').Value   := edt_promocao.EditValue;
ParamByName('pDtHr1').Value      := dtinicial.Date + hrinicial.Time;
ParamByName('pDtHr2').Value      := dtfinal.Date + hrfinal.Time;
open;

GOSTEI 0
Júnior Pinheiro

Júnior Pinheiro

26/02/2020

Emerson obrigado pela sua ajuda, a única coisa que mudei para funcionar foi o parâmetro, de value para AsDateTime.

Obrigado mesmo.
GOSTEI 0
POSTAR