-3

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

示例 .. 11.00、6.00、3.15、1.45、0.30、8.45 的总和

总小时输出为 30.35

但它应该是 31.15,请帮帮我..

4

4 回答 4

2

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

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
于 2013-07-04T04:32:54.417 回答
1

您应该根据100而不是根据60

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

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

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

于 2013-07-04T04:22:28.513 回答
0

2 种方式:你应该把它保存为小数,然后 SELECT SUM(total_hours)

或者

从 table_name 中选择 total_hours

并且只是 for 循环它。

Sum 运算符已经内置在 mysql 中,但它不会从 varchar 转换

于 2013-07-04T04:20:33.043 回答
0

这是因为 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 查询中做同样的事情。

于 2013-07-04T04:25:52.843 回答