【问题标题】:Calculating SUM() of time values returns the time value as a string计算时间值的 SUM() 以字符串形式返回时间值
【发布时间】: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

标签: php datetime doctrine aggregate-functions


【解决方案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,所以我试图弄清楚。
猜你喜欢
  • 2015-10-15
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多