如何正确计算日期时间(结束日期和开始日期之间的差异)-mysql

如何正确计算日期时间(结束日期和开始日期之间的差异)-mysql,mysql,datetime,difference,Mysql,Datetime,Difference,我正在mysql中使用。我创建了表“Sikcness”,并添加了一条记录: +--------+---------+---------+-------------+--------+----------+ | Id_SICK|ID_WORKER| BEGIN_DATE | END_DATE | +--------+---------+---------+----------+------------+---------+ | 1 | 1

我正在mysql中使用。我创建了表“Sikcness”,并添加了一条记录:

+--------+---------+---------+-------------+--------+----------+
| Id_SICK|ID_WORKER| BEGIN_DATE          | END_DATE            |
+--------+---------+---------+----------+------------+---------+
| 1      |   1     |2019-03-18 07:00:00  |2019-03-20 15:00:00  |  
+--------+---------+--------+------------+----------+----------+  
然后我想通过以下命令计算时间(结束日期列和开始日期列之间的时间差):

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(Sickness.END_DATE) - TIME_TO_SEC(Sickness.BEGIN_DATE))) AS 'SICKNESS TIME' FROM Sickness WHERE ID_WORKER = 1
但我只有这个结果(这是不正确的):

该命令应按如下方式计算:

+---------+-------------+--------+----------+
| BEGIN_DATE          | END_DATE            |
+---------+----------+------------+---------+
|2019-03-18 07:00:00  |2019-03-18 15:00:00  |  
+--------+------------+----------+----------+  
|2019-03-19 07:00:00  |2019-03-19 15:00:00  |  
+--------+------------+----------+----------+  
|2019-03-20 07:00:00  |2019-03-20 15:00:00  |  
+--------+------------+----------+----------+ 
那就对了:

SICKNESS TIME
24:00:00

我应该编写什么样的mysql查询?有什么想法吗?问候。

小时差应乘以天数差:

mysql> SELECT SEC_TO_TIME(SUM((DATEDIFF(end_date, begin_date) + 1) * (TIME_TO_SEC(END_DATE) - TIME_TO_SEC(BEGIN_DATE)))) AS 'SICKNESS TIME' FROM Sickness WHERE ID_WORKER = 1;
+---------------+
| SICKNESS TIME |
+---------------+
| 24:00:00      |
+---------------+
1 row in set (0.00 sec)

另一个时间\格式的查询:

mysql> select time_format(SUM((datediff(end_date, begin_date) + 1) * (time(end_date) - time(begin_date))), '%H:%i:%s') as 'SICKNESS TIME' from Sickness where id_worker = 1;
+---------------+
| SICKNESS TIME |
+---------------+
| 24:00:00      |
+---------------+
1 row in set (0.00 sec)

您可以在

上尝试此查询,因此,您需要按如下方式计算:

+---------+-------------+--------+----------+
| BEGIN_DATE          | END_DATE            |
+---------+----------+------------+---------+
|2019-03-18 07:00:00  |2019-03-18 15:00:00  |  
+--------+------------+----------+----------+  
|2019-03-19 07:00:00  |2019-03-19 15:00:00  |  
+--------+------------+----------+----------+  
|2019-03-20 07:00:00  |2019-03-20 15:00:00  |  
+--------+------------+----------+----------+ 
  • 患病第一天的小时数
  • 疾病最后一天的小时数
  • 患病天数乘以8(即工作小时数)
  • 完成后,您需要将这些值相加以得到结果,例如

    SELECT
    TIMESTAMPDIFF(HOUR, begin_date, CONCAT(DATE(begin_date), ' 15:00:00')) +
    (TIMESTAMPDIFF(DAY, begin_date, end_date) - 1) * 8 +
    TIMESTAMPDIFF(HOUR, CONCAT(DATE(end_date), ' 07:00:00'), end_date) AS time 
    FROM test
    WHERE worker = 1;
    

    这是我用这个命令做的

    ,但是它显示了太多的=56:00:00。我需要这样的查询,我在topNo difference中描述过。对不起:(24:00:00是首选结果吗?是的,这对我最有帮助。非常感谢你的帮助!)