我的表有以下列
列 | 数据类型 | (PK) table_id | INT 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
提取小时部分,但忽略该符号。