我有一个允许用户创建记录的数据库系统。在将记录发布到表时,它会捕获当前日期和时间。
我有一个允许用户过滤/搜索记录的表单。
允许过滤记录日期的最佳方法是什么。像 StartDate 和 EndDate 一样?
以下是我在为记录捕获 DateTime 时所做的事情。
FieldByName('logged_dt').AsDateTime := now;
我有一个允许用户创建记录的数据库系统。在将记录发布到表时,它会捕获当前日期和时间。
我有一个允许用户过滤/搜索记录的表单。
允许过滤记录日期的最佳方法是什么。像 StartDate 和 EndDate 一样?
以下是我在为记录捕获 DateTime 时所做的事情。
FieldByName('logged_dt').AsDateTime := now;
这样做的典型方法是使用带有参数和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 和数据。