Array
(
)

Pesquisa entre datas com campo char.

Eric.miranda
   - 09 mar 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!


Paullsoftware
   - 09 mar 2006

fiz um teste aqui e funcionou normalmente...

Tabela de Clientes (Nome, Fone e Cadastro)todos os campos como Char...
#Código

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:


Eric.miranda
   - 09 mar 2006

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


Eric.miranda
   - 10 mar 2006

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


Motta
   - 10 mar 2006

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 é cast(data_movimento as date)


Eric.miranda
   - 10 mar 2006

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


Motta
   - 10 mar 2006

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


Martins
   - 10 mar 2006

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

#Código


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!!!