我有一个SQLite数据库与同伴文件:( Fullname,Phone,StartDate,Montant),我想计算字段“Montant”的SUM,它在一系列日期之间,如(SUM(Montant)01之间) / 01/2018和03/01/2018)。
下面的图片描述了我的问题: SQL返回错误的结果200但是对于01/01/2018和02/01/2018之间的日期,正确的是120。 SQL return a wrong result
另一个问题是,当我将StartDate放大或者在数据库日期之后,浮动异常会像图片一样提升。 开始日期是06/01/2018,结束日期是10/01/2018。 Exception of float occured here
绝对数据库中的返回零并且没有异常,但SQLite返回异常,因为他找到了empy字段。
请帮忙。答案 0 :(得分:0)
正如你所描述的那样,答案是“20”。 你所指的120的答案是: => date1和< date2 - 这是什么? 即等于或大于日期1且小于日期2。 HTH
答案 1 :(得分:0)
感谢所有人,在努力工作和测试后,我将解决方案并将其分享给所有Delphi开发人员:
function _sqlSelectSumBetweenDates(aQuery: TFDQuery; aTable: string; aSumField: string; aField: string; aDate1: string; aDate2: string): Real;
var d1, d2: string;
begin
d1 := _SQLiteDateFormat(StrToDate(aDate1));
d2 := _SQLiteDateFormat(StrToDate(aDate2));
try
aQuery.SQL.Clear();
aQuery.SQL.Text := 'SELECT SUM(' + aSumField + ') FROM ' + aTable + ' WHERE ' + aField + ' BETWEEN ' + QuotedStr(d1) + ' AND ' + QuotedStr(d2);
aQuery.Active := True;
Result := aQuery.Fields[0].AsFloat;
except
Result := 0;
end;
end;
function _SQLiteDateFormat(aDate: TDate): string;
begin
Result := FormatDateTime('YYYY-MM-DD', aDate);
end;
知道你可以调用这个函数:
function _sqlSelectSumBetweenDates(aQuery: TFDQuery; aTable: string; aSumField: string; aField: string; aDate1: string; aDate2: string): Real;
并用您的值替换变量。