我有一个允许用户创建记录的数据库系统。在将记录发布到表格时,它会捕获当前的日期和时间。
我有一个允许用户过滤/搜索记录的表单。
允许过滤记录日期的最佳方法是什么。像StartDate和EndDate一样?
以下是捕获记录的DateTime时的操作。
FieldByName(' logged_dt')。AsDateTime:= now;
答案 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和数据测试并确定哪种方式最适合您。