我有一个数据集,需要按时间过滤。例如我想要 TDateTime 字段中包含的时间在上午 6:00 到下午 6:00 之间的记录。
我的数据集包含一个名为 time_of_day、类型为 TDateTime 的字段。分配给该字段的值是时间,没有日期。
我尝试使用时间的字符串表示形式 ( 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;
更完整的证明解决方案是使用 OnFilterRecord 事件。
procedure TForm4.ADODataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
if DataSet.FieldByName('TimeField').AsDateTime = FilterValue then
Accept := True
else
Accept := False
end;
如果你需要间隔,它看起来像这样。
ADODataSet1.Filter := 'TimeField >= 10:00:00 and TimeField < 11:00:00';
ADODataSet1.Filtered := True;
过滤记录
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;
如果您使用 AMPM 表示法,则需要将时间括在 '
ADODataSet1.Filter := 'TimeField >= ''10:00 AM'' and TimeField < ''11:00 AM''';
ADODataSet1.Filtered := True;
但我真的建议使用 OnFilterRecord,这样您就不必担心时间格式。
关于delphi - 如何在 Delphi 中根据 TDateTime 字段过滤数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5171699/