两个数据库时间字段之间的时差

时间:2014-02-23 03:35:38

标签: delphi

如果表中有3个字段:Start_Time,End_Time,Time_Between 如何计算Start_Time和End_Time之间的差异 (两者之间经过了多长时间),以便Time_Between字段显示差异? 您是否需要为Time_Between使用计算字段,或者您可以离开原生字段来完成工作吗?

编辑:我想知道是否可以在SQLite数据库中为Time_Between字段使用触发器来完成此操作。

这就是我的想法:

CREATE TRIGGER [TIME_DIFFERENCE]
AFTER UPDATE OF [END_TIME]
ON [MYTABLE]
BEGIN
UPDATE MYTABLE SET TIME_BETWEEN = strftime('%H',START_TIME) - strftime('%H',END_TIME) WHERE rowid=new.rowid; 
END

顺便说一下,这个(上面的例子)不起作用......

3 个答案:

答案 0 :(得分:1)

使用此代码段:

var dtStartTime : TDateTime;
    dtEndTime   : TDateTime;
    dtTimeBetween : TTime;
begin
  dtStartTime := Query1.FieldByName('Start_Time').AsDateTime;
  dtEndTime := Query1.FieldByName('End_Time').AsDateTime;
  dtTimeBetween := dtEndTime - dtStartTime;
end;

或者您可以从数据库中的时间戳获取年,月,日,小时,分钟,秒,如下所示。

   iYear := Query1.FieldByName('Start_Time').AsSQLTimeStamp.Year;
   iMonth := Query1.FieldByName('Start_Time').AsSQLTimeStamp.Month;
   iDay  := Query1.FieldByName('Start_Time').AsSQLTimeStamp.Day;
   iHour := Query1.FieldByName('Start_Time').AsSQLTimeStamp.Hour;
   ....... and so on.

现在您可以使用这些字段进行处理。

答案 1 :(得分:0)

发现了这个:

CREATE TRIGGER [TIME_DIFFERENCE]
AFTER UPDATE OF [end_date]
ON [Table1]
BEGIN
UPDATE Table1 SET DIFF = 
cast(
         (
                  strftime('%s',Table1.end_date)-strftime('%s',Table1.start_date)
         ) AS INT
      ) / 60/60 ;
END

据我所知,工作......

答案 2 :(得分:0)

您可以使用以下查询获得时差。

   SELECT CAST('0:00' AS TIME) + (TO_TIME - FROM_TIME) FROM TABLE_NAME;

此结果可用于任何更新触发器以设置时差fie