PHP MySQL将总和计算为一个时间


PHP MySQL calculate sum as a time

我的数据库有total_hours字段,我已经将其设置为VARCHAR。我应该想计算一下如何做这件事的总小时数。

示例。。 11.00、6.00、3.15、1.45、0.30、8.45之和

总小时输出为30.35

但应该是31.15,请帮帮我。

这将在小数点将时间分开,然后使用时钟运算将它们相加。

SELECT CONCAT(hours + minutes DIV 60, '.', minutes % 60) AS total_time
FROM (
    SELECT SUM(SUBSTRING_INDEX(total_hours, '.', 1)) AS hours,
           SUM(SUBTRING_INDEX(total_hours, '.', -1)) AS minutes
    FROM mytable) x

您应该根据100而不是根据60 存储分钟值

就像你应该在数据库中存储以下内容一样:

11.00  --> 11.00
3.15   --> 3.25
8.45   --> 8.75

那样你就可以避免这种情况。

这是因为8.45实际上是8:45,并且您使用十进制算术将它们相加。我会分别添加小时值和分钟值,然后将它们合并到代码中。

像这样的东西:

$hours = array("11.00", "6.00", "3.15", "1.45", "0.30", "8.45");
foreach ($hours as $hour)
{
   $point_pos = strpos($hour, ".");
   $hour_value += substr($hour, 0, $point_pos);
   $min_value += substr($hour, $point_pos +1, $point_pos+2);
}
$hour_value += intval($min_value/60);
$min_value = $min_value%60;
echo $hour_value  . ":" . $min_value;

编辑:您可以在MySQL查询中执行同样的操作。

两种方式:您应该将其保存为十进制,并只选择SUM(total_hours)

从table_name 中选择total_hours

并且只用于循环。

Sum操作符已经内置到mysql中,但它没有从varchar 转换