计算字段之间的时差

时间:2014-03-06 05:15:57

标签: sql delphi

我正在TEMP表中进行一些时间计算 我有以下字段:DATE_FROM,DATE_TO,TIME_FROM,TIME_TO
这些字段都是DateTime 要计算TIME_FROMTIME_TO之间的差异,我添加了一个计算值 名为TIME_DIFFERENCE的字段,也是DateTime字段。数据库是绝对数据库。因此,在我的TEMP的oncalculate字段事件中,我添加了:

procedure TForm1.TEMPCalcFields(DataSet: TDataSet);
begin
TEMP.Fields.FieldByName('TIME_DIFFERENCE').AsDateTime :=
          (TEMP.FieldByName('TIME_FROM').AsDateTime) - 
          (TEMP.FieldByName('TIME_TO').AsDateTime);
end;

时差工作正常,但我遇到了一个困难:计算仅适用于时间字段。我不知道如何将TIME_FROMDATE_FROM字段相关联。因为如果我选择TIME_FROM为22:00:00而TIME_TO为06:00:00,我会得到16小时的差异(应该是8)。我如何才能完成此操作,以便TIME_FROMDATE_FROM开始?最后一部分也是......

2 个答案:

答案 0 :(得分:0)

在您计算时差的地方编写SQL查询。

SELECT Field1, Field2, (TIME_FROM - TIME_TO) AS TIME_DIFFERENCE FROM SOME_TABLE 

答案 1 :(得分:0)

在Sql和Delphi中,Date / DateTime变量/字段包含数值。

假设值为1.0,则表示1天。 1.5将代表1天和12小时。

所以,当你将22:00:00放入Time_From时,它的值将为22/24。如果你把6:00:00改为time_to,当你减去这些变量时它将具有值06/24,你通常会得到16/24。

我从您的问题中了解到,您要求第二天早上22:00和06:00的夜晚区别。要进行正确的计算,您应该向Time_To变量添加1天。 (06 + 24 = 30)30/24。

还有一个小小的注释,让操作在另一个方向。时间 - 来自。假设Time-From已经过去了。