按日期范围筛选数据库记录

时间:2015-03-19 13:07:34

标签: delphi delphi-xe2 sybase-asa

我有一个允许用户创建记录的数据库系统。在将记录发布到表格时,它会捕获当前的日期和时间。

我有一个允许用户过滤/搜索记录的表单。

允许过滤记录日期的最佳方法是什么。像StartDate和EndDate一样?

以下是捕获记录的DateTime时的操作。

FieldByName(' logged_dt')。AsDateTime:= now;

1 个答案:

答案 0 :(得分:2)

这样做的典型方法是使用带参数的SQL和WHERE子句:

Query.SQL.Clear;
Query.SQL.Add('SELECT ColumnA, ColumnB, DateCol');
Query.SQL.Add('FROM TableA');
Query.SQL.Add('WHERE DateCol >= :StartDate');
Query.SQL.Add('AND DateCol <= :EndDate');
Query.ParamByName('StartDate').AsDateTime := StartDateYouWant;
Query.ParamByName('EndDate').AsDateTime := EndDateYouWant;
Query.Open;
if Query.IsEmpty then
  ShowMessage('No records found in that range')
else
  // Do whatever with the rows found

另一种语法是使用BETWEEN,这会将WHERE子句更改为

Query.SQL.Add('WHERE DateCol BETWEEN :StartDate AND :EndDate');

我遇到了使用BETWEEN和DATETIME列的问题,因为值的时间部分和(根据我自己的经验)使用>=(GTE)和{{1} (LTE)运营商更容易工作。您的里程可能会有所不同,因此您应该使用特定的DBMS和数据测试并确定哪种方式最适合您。