mysql - 如何使用 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
我如何实现我的既定目标?
解决方案
要回答您的第一部分 ,您可以使用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|
推荐阅读
- ruby-on-rails - 如何在 ActiveAdmin 中制作可排序的列?
- python - 如何合并不同数据框的两列,如果找到匹配项,使用 pandas 在新列中写入“True”
- python - 如何使打开的stl文件不漏水
- javascript - 警告:无法对未安装的组件执行 React 状态更新
- google-secret-manager - 如何从 Google Secret Manager 解码 base64 有效负载?
- ruby-on-rails - 如何使用 Rails 5.2 中的关系属性通过关系过滤 has_many 中的记录?
- python - Beautiful Soup 内联解析和
进字典
- python - 使用 Python 消除数据文件中的特定数字
- node.js - 节点声明表达多文件的区别?
- c++ - 如何声明任何继承类的实例?