计算时间值的 SUM() returns 时间值作为字符串

Calculating SUM() of time values returns the time value as a string

我有一个查询 return 我的数据库 table 中所有“总计”字段的总和。查询:

public function findHoursTotal($user)
{
    return $this->createQueryBuilder('h')
        ->where('h.user = :user')
        ->andWhere('h.date BETWEEN :start AND :end')
        ->select("SUM(h.total)")
        ->setParameter('user', $user)
        ->setParameter('start', new \DateTime("midnight first day of this month"))
        ->setParameter('end', new \DateTime("Last day of this month"))
        ->getQuery()
        ->getSingleScalarResult();
}

查询按预期工作,但我无法获得正确的格式。

total 字段是 TIME 并且包含如下值:

01:24:00
01:00:00

查询将return这个总和为12400。

我尝试了 DATE_FORMAT() 但这个 return 为空:

->select("DATE_FORMAT(SUM(h.total), '%H:%:i%s')")

我试图在我的控制器中将字符串转换为日期格式,但 php 认为格式以秒为单位。

有谁知道如何从 H:i:s 中的查询中获取结果?

您不能SUM time 值。但是你可以转换 TIME_TO_SEC, calculate sum of seconds, then convert SEC_TO_TIME:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(total)))
FROM h
WHERE ...
-- should give you something similar to 02:24:00