Wel*_*.59 1 delphi datetime filter
我有一个数据集,我需要按时间过滤.例如,我想要记录TDateTime字段中包含的时间是在上午6:00到下午6:00之间.
我的数据集包含名为time_of_day的字段,类型为TDateTime.分配给该字段的值是一个时间,没有日期.
我尝试使用time(time_of_day >= '6:00 AM' and time_of_day <= '6:00 PM')的字符串表示形式创建过滤器字符串,并使用浮点表示(time_of_day >= 0.25 and time_of_day < 0.75),但两者都没有工作.
我需要知道如何构造过滤器字符串以分配给TDataSet.Filter属性.
我认为这可能取决于短时间格式,但这适用于我使用TADODataSet.
ADODataSet1.Filter := 'TimeField = 11:00:00';
ADODataSet1.Filtered := True;
Run Code Online (Sandbox Code Playgroud)
更完整的证明解决方案是使用OnFilterRecord事件.
procedure TForm4.ADODataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
if DataSet.FieldByName('TimeField').AsDateTime = FilterValue then
Accept := True
else
Accept := False
end;
Run Code Online (Sandbox Code Playgroud)
如果你需要间隔,它会是这样的.
ADODataSet1.Filter := 'TimeField >= 10:00:00 and TimeField < 11:00:00';
ADODataSet1.Filtered := True;
Run Code Online (Sandbox Code Playgroud)
OnFilterRecord
procedure TForm4.ADODataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
if (DataSet.FieldByName('DateField').AsDateTime >= FromTime) and
(DataSet.FieldByName('DateField').AsDateTime < ToTime) then
Accept := True
else
Accept := False
end;
Run Code Online (Sandbox Code Playgroud)
如果您使用AMPM表示法,则需要将时间括起来 '
ADODataSet1.Filter := 'TimeField >= ''10:00 AM'' and TimeField < ''11:00 AM''';
ADODataSet1.Filtered := True;
Run Code Online (Sandbox Code Playgroud)
但我真的会推荐OnFilterRecord,所以你不必担心时间格式.