Parâmetros tipo data, usando dbExpress e Oracle TimeStamp
Tenho uma consulta de pedidos de um intervalo de de datas que não retorna o que foi pedido. A instrução SQL no SQLDataSet é:
SELECT * FROM PEDIDOS
WHERE DAT_FATURAMENTO BETWEE :DATA_INICIAL AND :DATA_FINAL;
Ocorre que se eu peço um intervalo de 23/10/2004 a 24/10/2004, a consulta retorna os dados do dia 24 apenas, e assim por diante. Pra resolver, tive que usar um artifício no mínimo estranho, usando a expressâo ´BETWEEN :DATA_INICIAL - 1 AND :DATA_FINAL´ no lugar da original. Esta consulta, se efetuada pelo SQLPLUS funciona perfeitamente.
Gostaria de saber se alguém já teve este problema, e como resolveu.
Grato.
SELECT * FROM PEDIDOS
WHERE DAT_FATURAMENTO BETWEE :DATA_INICIAL AND :DATA_FINAL;
Ocorre que se eu peço um intervalo de 23/10/2004 a 24/10/2004, a consulta retorna os dados do dia 24 apenas, e assim por diante. Pra resolver, tive que usar um artifício no mínimo estranho, usando a expressâo ´BETWEEN :DATA_INICIAL - 1 AND :DATA_FINAL´ no lugar da original. Esta consulta, se efetuada pelo SQLPLUS funciona perfeitamente.
Gostaria de saber se alguém já teve este problema, e como resolveu.
Grato.
Antonio_zanotto
Curtidas 0
Respostas
Gandalf.nho
18/10/2004
[b:f75af800c6][color=red:f75af800c6]Notificação de Infração às Regras de Conduta :[/color:f75af800c6][/b:f75af800c6]
Tópico no fórum errado (deveria estar em Oracle)
Para maiores esclarecimentos pode mandar-me uma [url=http://delphiforum.icft.com.br/forum/privmsg.php?mode=post&u=8378]Mensagem Particular[/url].
Tópico no fórum errado (deveria estar em Oracle)
Para maiores esclarecimentos pode mandar-me uma [url=http://delphiforum.icft.com.br/forum/privmsg.php?mode=post&u=8378]Mensagem Particular[/url].
GOSTEI 0
Afarias
18/10/2004
já vi esse ´problema´ ocorrer mas mostrando apenas datas do dia anterior (23 no seu caso) -- nestes casos, é simplesmente pq o campo é data-hora e dai, quando comparado com datas, pro banco fica::
data-hora between ´23.10.2004 00:00:00´ and ´24.10.2004 00:00:00´
o q excluiria os registros com data ´24.10.2004´ vistos q todos teriam uma parte HORA > 00:00:00
mas pelo jeito não é o seu caso.
:(
T+
data-hora between ´23.10.2004 00:00:00´ and ´24.10.2004 00:00:00´
o q excluiria os registros com data ´24.10.2004´ vistos q todos teriam uma parte HORA > 00:00:00
mas pelo jeito não é o seu caso.
:(
T+
GOSTEI 0
Motta
18/10/2004
o TRUNC resolve estes casos, o problema é que pode matar o uso de um indice
select *
from tabela
where trunc(data) between :d1 and :d2
atenção ao que for passado para os param.
ver se tem hora.
select *
from tabela
where trunc(data) between :d1 and :d2
atenção ao que for passado para os param.
ver se tem hora.
GOSTEI 0
Antonio_zanotto
18/10/2004
Na verdade, o meu problema não é com o Oracle, e sim com o Delphi. Se executar a mesma consulta no SqlPlus, por exemplo, o resultado será correto. O que me leva a crer que talvez o problema esteja com o o dbExpress do Delphi.
GOSTEI 0
Motta
18/10/2004
Publique o form onde passa os parametros
GOSTEI 0