我的数据库有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 转换