id title start end 1 Doing Coding for this project. 2013-04-02 02:00:00 2013-04-02 04:00:00 2 Doing Coding for this project. 2013-04-02 04:00:00 2013-04-02 06:00:00 3 Doing Coding for this project. 2013-04-02 06:00:00 2013-04-02 06:30:00
我有以上MySQL
数据库表记录。现在我想获得hours.
我正在开发TimeSheet Management Application
和我们需要显示总工作时间,分钟和员工的秒数。 (即根据我分享的数据04:30:00)
我尝试了什么?
SELECT HOUR(TIMEDIFF(end,start)) AS 'totalHour'
但仅适用于不在所有记录上的每一行。
我也试过TIMESTAMPDIFF
。
这可能吗?
修改
从我收到的答案中我已经尝试了每一个人,但每次我得到4
或4.5000
,但它应该返回06:30:00
。
答案 0 :(得分:3)
HOUR()
函数的范围是0 to 23
因此在diff中使用它的总小时数是不正确的。
对于单个值,您可以使用TIMESTAMPDIFF()
,如:
SELECT TIMESTAMPDIFF(HOUR, start, end) AS `totalHour` FROM ...
如果你想为整个项目计算它,你必须总结所有的时间差异,并且它们打印格式可能与funciton类似TIME_FORMAT()
打印小于24的小时:
如果时间值包含大于23的小时部分,则%H和%k小时格式说明符会生成大于0..23的通常范围的值。其他小时格式说明符生成以模12为单位的小时值。
所以你可以使用:
SELECT TIME_FORMAT( SEC_TO_TIME( SUM( TIME_TO_SEC(end) - TIME_TO_SEC(start))), "%H")
AS `totalHour`
FROM ...
GROUP BY sort_of_project_id
如果您还需要秒/分钟(如评论中所示),请使用:
time_to_sec( <left side of select>)/3600
将返回4.84 hours
TIME_FORMAT( ..., "%H:%m:%s")
将显示4:38:24
答案 1 :(得分:2)
尝试此查询
SELECT
id,
title,
TIME_FORMAT(SEC_TO_TIME(sum(TIME_TO_SEC(TIMEDIFF( end, start)))), "%h:%i") AS diff
FROM
tbl1
GROUP BY
title
根据您提供的答案数据应该是4:30。 Pl交叉检查你的记录。
<强> FIDDLE 强>
答案 2 :(得分:1)
尝试这样,它将为您提供总时数:
例如:
SELECT sum(time_to_sec(timediff(end, start ))/ 3600) AS 'totalHour' from test;
如果您针对上面的表运行此查询,则会显示输出4.5
小时。
希望它会对你有所帮助。
答案 3 :(得分:1)
我已在其他帖子Query is not working
中回答我刚刚创建了一个名为dataimport
的临时表并写了一个查询,
SELECT EnNo
,work_dt,
SEC_TO_TIME(sum(TIMESTAMPDIFF(SECOND,登录,注销)))作为time_worked
来自(
选择EnNo
,日期(DateTime
)作为work_dt,DateTime
作为登录
,合并(
(选择MIN(DateTime
)
从dataimport
起b
在哪里a.EnNo = b.EnNo
和日期(a。DateTime
)=日期(b。DateTime
)
和b。DateTime
&gt; = a。DateTime
和b。INOUT
='E'
),now())AS注销
来自dataimport
AS
在哪里。INOUT
='S'
)作为t
GROUP BY EnNo
,work_dt
最后输出为
希望这就是你所看到的。
答案 4 :(得分:0)
更改您的
SELECT HOUR(TIMEDIFF(end,start)) AS 'totalHour'
到
SELECT sum(TIMESTAMPDIFF(HOUR, end, start)) AS 'totalHour'
答案 5 :(得分:0)
SELECT IF(DATE(datetime_end) = DATE(datetime_start), TIMEDIFF(datetime_end,datetime_start), IF(DATEDIFF(datetime_start,datetime_end) > 1, ADDTIME( TIME_FORMAT(CONCAT((DATEDIFF(datetime_start,datetime_end) - 1) * 8,':00:00'), "%H:%i:%s"), ADDTIME( TIMEDIFF(datetime_end,CONCAT(DATE(datetime_end),' 08:00:00')), TIMEDIFF(CONCAT(DATE(datetime_start),' 17:00:00'),datetime_start) ) ) , ADDTIME( TIMEDIFF(datetime_end,CONCAT(DATE(datetime_end),' 08:00:00')), TIMEDIFF(CONCAT(DATE(datetime_start),' 17:00:00'),datetime_start) ) ) ) AS total_working_hrs FROM table