MySQL自动计算两个TIME值之间的小时差,并带有小数点



我的表有以下列

tbody> <<tr>持续时间
数据类型
(PK) table_idINT AUTO_INCREMENT
start_time时间
end_time时间
小数(10,2)

最简单的方法是这样计算

(TIME_TO_SEC(_end_time) - TIME_TO_SEC(_start_time))

将给出秒数,然后除以秒(单位为小时),使用TRUNCATE

insert into my_table(start_time,end_time, duration) select _start_time,_end_time, 
TRUNCATE(
(TIME_TO_SEC(_end_time) - TIME_TO_SEC(_start_time))/3600
, 2);

此处不需要函数,但如果您愿意,可以添加。

将数字格式化为小数点后2位

https://www.w3schools.com/sql/sql_insert_into_select.asp

https://www.w3resource.com/mysql/date-and-time-functions/mysql-time_to_sec-function.php

如果你需要它也可以使用"next day"像这样做

(TIME_TO_SEC(_end_time) - TIME_TO_SEC(_start_time)) + 
case when _start_time > _end_time then 24*3600 else 0 end 

如果值为第二天,则表示添加24小时。

第二行表示晚上8:30到第二天凌晨4:00,您需要(20:30:00,28:00:00)。

select table_id,
start_time,
end_time,
timediff(end_time, start_time).        as diff,
hour(timediff(end_time, start_time))   as diff_hh,
minute(timediff(end_time, start_time)) as diff_mm,
second(timediff(end_time, start_time)) as diff_ss,
hour(timediff(end_time, start_time)) +
minute(timediff(end_time, start_time)) / 60.0 +
second(timediff(end_time, start_time))  / 3600.0 as duration
from ss;

解释TIME数据类型思想的一些例子:

table_id|start_time|end_time|diff     |diff_hh|diff_mm|diff_ss|duration|
--------+----------+--------+---------+-------+-------+-------+--------+
1|  09:00:00|17:30:00| 08:30:00|      8|     30|      0|  8.5000|
2|  20:30:00|04:00:00|-16:30:00|     16|     30|      0| 16.5000|
3|  20:30:00|28:00:00| 07:30:00|      7|     30|      0|  7.5000| 

请注意,hour提取小时部分,但忽略该符号。

最新更新