计算时间值的 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
我有一个查询 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