首页 > 解决方案 > 如何使用 SQL 查询计算时差?

问题描述

我有一个名为 tblemptimelog 的 SQL 表,其中包含以下列:

empid - INT 工作日期 - DATE timein1 - TIME timeout1 - TIME timein2 - TIME timeout2 - TIME

我的查询:

"SELECT * FROM tblemptimelog
 WHERE empid = 1111
 ORDER BY workdate";

结果显示如下:

|Emp ID | Date       | Time In  | Time Out | Time In  | Time Out
|1111   | 04-18-2020 | 08:00:00 | 12:00:00 | 13:10:05 | 17:00:00
|1111   | 04-19-2020 | 08:00:00 | 12:00:00 | 13:00:00 | 17:00:00

我想显示 timein1 和 timeout1 之间的时间差。

以及timein2和timeout2的时间差如下:

|Emp ID | Date       | Time In  | Time Out | Time In  | Time Out | Total Time
|1111   | 04-18-2020 | 08:00:00 | 12:00:00 | 13:10:05 | 17:00:00 | 07:49:55
|1111   | 04-19-2020 | 08:00:00 | 12:00:00 | 13:00:00 | 17:00:00 | 08:00:00

我还想显示总时间。在这种情况下,它将是 15:49:55

Total: 15:49:55

我如何实现我的既定目标?

标签: mysql

解决方案


要回答您的第一部分 ,您可以使用timediff & addtime

我想显示 timein1 和 timeout1 之间的时间差以及 timein2 和 timeout2 之间的时间差

select
    a.*,
TIMEDIFF(time_out_1, time_in_1) diff_time_1,
TIMEDIFF(time_out_2, time_in_2) diff_time_2,
ADDTIME( TIMEDIFF(time_out_1, time_in_1), TIMEDIFF(time_out_2, time_in_2)) diff_time_1_and_2
from
    ( 
    select  TIME('08:00:00') time_in_1, TIME('12:00:00') time_out_1, TIME('13:10:05') time_in_2, TIME('17:00:00') time_out_2
    union all  
    select  TIME('08:00:00') time_in_1, TIME('12:00:00') time_out_1, TIME('13:00:00') time_in_2, TIME('17:00:00') time_out_2
    ) as a

结果

time_in_1|time_out_1|time_in_2|time_out_2|diff_time_1|diff_time_2|diff_time_1_and_2|
---------|----------|---------|----------|-----------|-----------|-----------------|
 08:00:00|  12:00:00| 13:10:05|  17:00:00|   04:00:00|   03:49:55|         07:49:55|
 08:00:00|  12:00:00| 13:00:00|  17:00:00|   04:00:00|   04:00:00|         08:00:00|

要回答您的第二部分,您可以使用SEC_TO_TIME(SUM(TIME_TO_SEC(time)))转换为秒然后求和,然后返回时间

另外,在表格之后,我想显示总时间。在这种情况下,它将是 15:49:55

总计:15:49:55

select SEC_TO_TIME(SUM(TIME_TO_SEC(diff_time_1_and_2))) total_time  from ( 
select
    a.*,
TIMEDIFF(time_out_1, time_in_1) diff_time_1,
TIMEDIFF(time_out_2, time_in_2) diff_time_2,
ADDTIME( TIMEDIFF(time_out_1, time_in_1), TIMEDIFF(time_out_2, time_in_2)) diff_time_1_and_2
from
    ( 
    select  TIME('08:00:00') time_in_1, TIME('12:00:00') time_out_1, TIME('13:10:05') time_in_2, TIME('17:00:00') time_out_2
    union all  
    select  TIME('08:00:00') time_in_1, TIME('12:00:00') time_out_1, TIME('13:00:00') time_in_2, TIME('17:00:00') time_out_2
    ) as a
    ) as b

结果

total_time|
----------|
  15:49:55|

推荐阅读