select sum(某字段) from table where 日期 between Data1 and Data2
统计2005-5-8到2005-5-9是对的 可统计 2005-5-8到2005-5-12就不对了.是怎么回事啊?代码如下:with adoquery1 do begin sql.Clear; sql.add('select sum(a1),sum(a2),sum(a3)'); sql.add('from fs'); sql.add('where date between :date1 and :date2'); parameters.parambyname('date1').Value:=datetostr(datetimepicker4.date); Parameters.parambyname('date2').value:=datetostr(datetimepicker5.date); adoquery1.Prepared; adoquery1.open; 谢谢~~~
begin
sql.Clear;
sql.add('select sum(a1),sum(a2),sum(a3)');
sql.add('from fs');
sql.add('where date between :date1 and :date2');
parameters.parambyname('date1').Value:=datetostr(datetimepicker4.date);
Parameters.parambyname('date2').value:=datetostr(datetimepicker5.date);
adoquery1.Prepared;
adoquery1.open;
谢谢~~~
数据库中如果是2005-05-08 08:00 到2005-05-12 :06:00 的话
用Sql进行查询2005-05-08到2005-05-12,会将时间转化为2005-05-08 00:00 到2005-05-12 00:00,
自然就不会包含2005-05-12这天的数据。不知是不是这个问题。
好像从08-09 ,10-12计算sum(a1),sum(a2),都是对的.可只要跨越了10号就有问题~~可能还是between的条件有问题.请大哥们指点啊~~~
2005-05-08 3
2005-05-09 2
2005-05-10 3
2005-05-11 1
2005-05-12 1 sum(a1)
8-9 5
8-10 8
8-11 5
8-12 4
9-10 10
9-11 7
9-12 6
10-12 5
1.把你的计算机系统的日期格式设置为yyyy-mm-dd的格式,应该就可以了。但这样的话要求运行你程序的所有机子都要这么设置,程序的移植性能不好,所以建议使用第二种方法。2.把 parameters.parambyname('date1').Value:=datetostr(datetimepicker4.date);
Parameters.parambyname('date2').value:=datetostr(datetimepicker5.date);
改为:
parameters.paramvalues['date1']:=datetimepicker4.date;
Parameters.paramvalues['date2']:=datetimepicker5.date;