2017-04-06 35 views
1

我正在计算SUM()与同一表中两列的总和,但最终结果是整数(286676)。我猜这是毫秒?我如何转换为TIME(00:00:00)?Mysql SUM()TIME错误格式

数据库

id|hours_worked | hours_worked_wk2 | 

hours_worked = 14时33分38秒 hours_worked_wk2 = 14时33分38秒

查询

SELECT *,SEC_TO_TIME(SUM(TIME_TO_SEC(ep.hours_worked)))+SEC_TO_TIME(SUM(TIME_TO_SEC(ep.hours_worked_wk2))) 
AS TotalHoursWorked 
FROM employeepayroll ep 
JOIN employees em ON ep.employee_id=em.employee_id 
JOIN payroll p ON ep.payroll_id=p.payroll_id 
JOIN payrolltaxes pt ON ep.payroll_id=pt.payroll_id 
WHERE ep.timesheet_status='Approved' AND p.pay_group='26' 
ORDER BY ep.payroll_id DESC 

TotalHoursWorkd = 286676

回答

2

使用以下公式。

hours = cast(duration_in_milliseconds \ (60 * 60 * 1000) as int) 
mins = (duration_in_milliseconds \ (60 * 1000)) mod 60 
secs = (duration_in_milliseconds \ 1000) mod 60 

您的查询将是这个样子:

select cast(duration_in_milliseconds\(60*60*1000) as int)+':'((duration_in_milliseconds \ (60*1000)) mod 60;)+':'((duration_in_milliseconds \ 1000) mod 60) from something 
+0

这是一个无效的命令。 –

+0

命令行无法识别此字符'\' –

+0

是的,我知道。我刚刚给你的公式:) 你可以在你的查询中亲自编辑它。 – hamzox

0

当你看到它...

14:33:38 >>> 143,338 × 2 = 286,676 

让人惊讶。时代中的数字被隐含地转换为整数。

您正在添加SEC_TO_TIME(SUM(...))+SEC_TO_TIME(SUM(...))的两个值。

改为使用SEC_TO_TIME(SUM(...) + SUM(...))