如何使用Delphi解决日期之间的SQLite SUM()?

时间:2018-05-20 23:17:13

标签: sql sqlite delphi sum

我有一个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字段。

请帮忙。

2 个答案:

答案 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;

并用您的值替换变量。