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

如何使用Delphi解析日期之间的SQLite SUM()?,sql,sqlite,delphi,sum,Sql,Sqlite,Delphi,Sum,我有一个SQLite数据库,其中包含以下文件:(全名、电话、起始日期、Montant),我想计算字段“Montant”的总和,该字段位于一系列日期之间,如(2018年1月1日至2018年1月3日之间的总和(Montant)) 下图描述了我的问题: SQL返回错误的结果200,但对于2018年1月1日至2018年1月2日之间的日期,正确的结果是120。 另一个问题是,当我将StartDate放大或放在数据库日期之后时,会出现一个浮动异常,如图所示。 起始日期为2018年1月6日,结束日期为201

我有一个SQLite数据库,其中包含以下文件:(全名、电话、起始日期、Montant),我想计算字段“Montant”的总和,该字段位于一系列日期之间,如(2018年1月1日至2018年1月3日之间的总和(Montant))

下图描述了我的问题: SQL返回错误的结果200,但对于2018年1月1日至2018年1月2日之间的日期,正确的结果是120。

另一个问题是,当我将StartDate放大或放在数据库日期之后时,会出现一个浮动异常,如图所示。 起始日期为2018年1月6日,结束日期为2018年1月10日。

在绝对数据库中,返回零并且没有异常,但SQLite返回异常,因为他找到了empy字段


请帮忙。

正如你所描述的,答案是“20”。 答案为120的您所指的是: =>date1和hth

感谢大家,经过艰苦的工作和测试,我找到了解决方案,我将把它分享给所有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;

并用您的值替换变量。

请在问题本身中提供一些示例数据和所需的输出。(有关如何添加的信息,请参阅。)您的问题是v。不清楚的。a) 您在AbsDB和SqlLite中使用的日期格式是什么,例如dd/mm/yyyy,您是否检查过这两种格式是否相同?b) 在任何情况下,在Sql查询中使用
Between
都不是一个好主意,尤其是使用日期列。F.i.您是否绝对肯定在这两个数据库中,查询将包括StartDate等于之间的
的上限值的行?通常最好要求后面的日期在范围内上限值之后的一天之前。