计算时间值的 SUM() 以字符串形式返回时间值
Posted
技术标签:
【中文标题】计算时间值的 SUM() 以字符串形式返回时间值【英文标题】:Calculating SUM() of time values returns the time value as a string 【发布时间】:2021-12-11 18:05:40 【问题描述】:我有一个查询,它返回我的数据库表中所有“总计”字段的总和。查询:
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
查询将返回总和为 12400。
我尝试了 DATE_FORMAT()
但这返回 null:
->select("DATE_FORMAT(SUM(h.total), '%H:%:i%s')")
我试图在我的控制器中将字符串转换为日期格式,但 php 认为格式以秒为单位。
有谁知道如何从 H:i:s 中的查询中获取结果?
【问题讨论】:
您使用的是什么 rdbms,h.total
列的数据类型是什么?
@SalmanA h.total 字段的数据类型是 Time 但查询返回一个字符串并且我使用 Phpmyadmin
【参考方案1】:
您不能将SUM
设为time
值。但是你可以转换TIME_TO_SEC
,计算秒数,然后转换SEC_TO_TIME
:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(total)))
FROM h
WHERE ...
-- should give you something similar to 02:24:00
【讨论】:
感谢您的遮阳篷。我正在尝试使该功能正常工作,因为我收到此错误:Error: Expected known function, got 'SEC_TO_TIME'
您使用的是什么数据库?这些函数在 mysql 中可用,所以应该不是问题。此外,这是原始查询。你需要做类似select("SEC_TO_TIME(SUM(TIME_TO_SEC(h.total)))")
是的,我在 phpmyadmin 中尝试了原始查询,它可以工作。只有 Symofny 没有重新调整函数 SEC_TO_TIME,所以我试图弄清楚。以上是关于计算时间值的 SUM() 以字符串形式返回时间值的主要内容,如果未能解决你的问题,请参考以下文章