Intervalo de Datas - SqlServer 2000
Saudações Dephianas!!!!
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
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
Curtidas 0
Respostas
Emerson Nascimento
17/05/2008
tente assim:
select * from sua_tabela where convert(datetime, campo_data, 103) between :datainical and :datafinal
GOSTEI 0
Roger1976
17/05/2008
emerson, eu tinha colocado desta forma:
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
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
GOSTEI 0
Emerson Nascimento
17/05/2008
não use datas como strings concatenadas. assim você precisará saber como está definido o formato de datas no SGBDR.
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:
para usar a função DateTimeToSQLTimeStamp é necessário adicionar a unit SqlTimSt na cláusula uses.
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.
GOSTEI 0
Roger1976
17/05/2008
emerson, muito obrigado, agora funcionou, só fiz uma pequena alteração, que deu na mesma:
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
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
GOSTEI 0
Emerson Nascimento
17/05/2008
tire esse FormatDateTime daí...
GOSTEI 0