Pesquisa entre datas com campo char.

09/03/2006

Boa tarde pessoal..
tenho um banco de dados no qual foi configurado a
data_movimento -> char(10).
então são gravados as datas 01/03/2006.. etc..

agora tenho que fazer uma consulta entre as datas, e como montaram as datas como char não estou sabendo fazer..

ex.
select * from producao
where data_movimento between :dt1 and :dt2

se as datas forem por exemplo de 20/02/2006 a 24/02/2006.. ele filtra direitinho

mas se for 20/02/2006 a 02/03/2006. ele não acha nenhum registro..

seria inviável pra mim mudar a estrutura da tabela,visto que já tem mtos registros..

tem alguma outra solução?

Obrigado pessoal!


Eric.miranda

Respostas

09/03/2006

Paullsoftware

fiz um teste aqui e funcionou normalmente...

[b:b335e5131f]Tabela de Clientes (Nome, Fone e Cadastro)[/b:b335e5131f][i:b335e5131f]todos os campos como [/i:b335e5131f]Char...
With QyClientes do
 begin
  close;
  Sql.Clear;
  Sql.Add(´ Select * from Clientes ´+
              ´ where Cadastro between :dt1 and :dt2 ´);
  ParamByName(´dt1´).AsDate := DtPk1.Date;
  ParamByName(´dt2´).AsDate := DtPk2.Date;
  Prepare;
  Open;
 end;

Não sei se vc sabe, mais não é bom usar o tipo de dados char(x) normalmente ele completa o preenchemento do campo com espaços em branco use VarChar(x) no seu lugar... :wink:


Responder Citar

09/03/2006

Eric.miranda

Valeu PaullSoftware, mas não deu certo aqui..

deu invalid date format..
fiz do jeito que vc descreveu.. qual será o problema??

meu campo data_movimento é um char(10) ex: 30/01/2006

valeu


Responder Citar

10/03/2006

Eric.miranda

Alguém tem alguma sugestão pra me dar???


Responder Citar

10/03/2006

Motta

Qual banco ??

Já tentou um Cast para date , não sei a sintaxe correta, no Oracle existe uma function to_date , mas é proprietaria.

acho que a sintaxe é [b:0d2c040437]cast(data_movimento as date)[/b:0d2c040437]


Responder Citar

10/03/2006

Eric.miranda

Fala Motta,
Uso o sqlserver 2000..
vc sabe se tem algo parecido nele?


Responder Citar

10/03/2006

Motta

acho tem uma function proprietaria tb, mas nao sei qual é,
tenta um forum de sqlserver.


Responder Citar

10/03/2006

Martins

Bem no SQL - Server se não estou enganado, e espero não está, existem [b:469a51f378]Convert [/b:469a51f378]e [b:469a51f378]Cast[/b:469a51f378]. Aproveitando um exemplo postado anteriormente e fazendo algumas modificações para ficar de acordo com SQL Server.

With QyClientes do 
 begin 
  close; 
  Sql.Clear; 
  Sql.Add(´ Select *  from Clientes ´+ 
              ´ where Cast(Data_Movimento as DateTime) between :dt1 and :dt2 ´); 
  ParamByName(´dt1´).AsDate := DtPk1.Date; 
  ParamByName(´dt2´).AsDate := DtPk2.Date; 
  Prepare; 
  Open; 
 end;


Qualquer coisa retorne aqui no tópico para q possamos lhe ajudar.

Boa sorte!!!


Responder Citar