如何在访问sql查询中减去两列时间

时间:2011-05-02 21:15:40

标签: sql ms-access

我在其中一个表格中有两列:Arrival_TimeLeaving_Time。 两者都是时间字段,格式如下:HH:MM:SS

我想从Leaving_Time中减去Arrival_Time,例如:

到达时间:02:00:00
Leaving_time:02:45:00 = 45分钟。

我尝试了这个查询:

SELECT  (Jobs.Leaving_time) - (Jobs.Arrival_Time) AS Time_Difference
FROM Technicians,Jobs, Tech_Allocation
WHERE Jobs.Job_ID=Tech_Allocation.Job_ID     
  AND Tech_Allocation.Technician_ID=Technicians.Technician_ID
ORDER BY  (Jobs.Leaving_time) - (Jobs.Arrival_Time) ASC;

查询运行但减法的结果以小数显示,而不是我想要的分钟。

谢谢

3 个答案:

答案 0 :(得分:3)

在Access中,您需要查看the DateDiff() function

答案 1 :(得分:1)

由于您正在使用MS Access,我发现这个名为On time and how much has elapsed的MS Office讨论。请查看totalminutes = Int(CSng(interval * 1440))之类的内容是否有意义。

答案 2 :(得分:1)

在您的问题中,您说您希望将持续时间显示为分钟。但是在评论中,您说您希望结果显示为小时:分钟:秒。

使用Format()函数将浮点值显示为Hour:Minutes:Seconds。

SELECT Format(j.Leaving_time - j.Arrival_Time, "hh:nn:ss") AS Time_Difference
FROM Technicians AS t, Jobs AS j, Tech_Allocation AS ta
WHERE j.Job_ID = ta.Job_ID     
  AND ta.Technician_ID = t.Technician_ID
ORDER BY 1 ASC;

请注意,此方法仅适用于少于24小时的Time_Differences。

编辑:

  1. 我在ORDER BY中使用了1来引用字段列表中的第一项。它比在ORDER BY中编写字段表达式更方便。
  2. 您在ORDER BY中确实不需要ASC。
  3. 我会使用Access'查询设计器将表连接到INNER JOIN表达式,而不是旧式WHERE方法。
  4. 为表分配简短有意义的ALIAS可以使SQL更简洁,更容易理解。