私のデータベースには 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 であり、10 進演算を使用してそれらを合計するためです。時間の値と分の値を別々に追加してから、それらをコードに結合します。
このようなもの:
$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 クエリでも同じことができます。
2 つの方法: 10 進数として保存し、SELECT SUM(total_hours) する必要があります。
また
table_name から total_hours を選択
ループするだけです。
Sum 演算子は既に mysql に組み込まれていますが、varchar から変換されません。