0

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

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

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

以下是我在为记录捕获 DateTime 时所做的事情。

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

4

1 回答 1

2

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

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)和<=(LTE)运算符更容易工作。您的里程可能会有所不同,因此您应该测试并决定哪种方式最适合您的特定 DBMS 和数据。

于 2015-03-19T13:29:25.600 回答