Intervalo de Datas - SqlServer 2000
17/05/2008
0
Estou à frente de um problema duro de se resolver. Eu tenho uma tabela com um campo DATA, no formato varchar. Qdo o usuário insere um registro, esta data é gravada no formato 00/00/0000. Ao pesquisar registros utilizando um intervalo de datas, ele está analisando apenas os 2 primeiros caracteres que representa o dia, se eu digitar um intervalo entre 01/05/2008 e 31/05/2008, se existir uma data 02/03/2008, ele mostra. Não sei mais o que fazer, já pesquisei em vários lugares, e não obtive a solução. Fico anciosamente no aguardo, ah, estou usando o sqlserver 2000 e delphi 2005.
[]s
Roger1976
Posts
17/05/2008
Emerson Nascimento
select * from sua_tabela where convert(datetime, campo_data, 103) between :datainical and :datafinal
17/05/2008
Roger1976
with ClientDataSet1 do
begin
close;
commandtext := ´ select * from TESTE ´ +
´ where convert(datetime, DATA_NASC, 103) between ´ +
FormatDateTime(´DD/MM/YYYY´, StrToDate(Edit1.Text)) + ´ and ´ + FormatDateTime(´DD/MM/YYYY´, StrToDate(Edit2.Text));
open;
end;
kra, simplesmente não traz informação alguma. e o problema é q o campo DATA já foi criado como varchar(250) (não foi eu quem criou) e contém informações.
Tá difícil, já usei cast, não funcionou, estou ficando sem opções.
Obrigado pela força, caso tenha alguma outra idéia, será muito bem-vinda.
[]s
17/05/2008
Emerson Nascimento
passe as datas como parâmetros para o dataset. assim o mecanismo (driver) do banco de dados se encarrega de enviar a data na formatação correta.
tente assim:
with ClientDataSet1 do begin close; commandtext := ´select * from TESTE ´ + ´where convert(datetime, rtrim(ltrim(DATA_NASC)), 103) ´+ ´ between :DataInicial and :DataFinal ´; params.parambyname(´datainicial´).asqltimestamp := datetimetosqltimestamp(StrToDate(Edit1.Text)); params.parambyname(´datafinal´).asqltimestamp := datetimetosqltimestamp(StrToDate(Edit2.Text)); open; end;
para usar a função DateTimeToSQLTimeStamp é necessário adicionar a unit SqlTimSt na cláusula uses.
17/05/2008
Roger1976
with ClientDataSet1 do
begin
close;
commandtext := ´ select * from TESTE where convert(datetime, DATA_NASC, 103) between :data1 and :data2´;
Params.parambyname(´data1´).value := FormatDateTime(´DD/MM/YYYY´, StrToDate(Edit1.Text));
Params.parambyname(´data2´).value := FormatDateTime(´DD/MM/YYYY´, StrToDate(Edit2.Text));
open;
end;
Valeu mesmo!
[]s
Clique aqui para fazer login e interagir na Comunidade :)