-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

これは、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 クエリでも同じことができます。

于 2013-07-04T04:25:52.843 に答える
0

2 つの方法: 10 進数として保存し、SELECT SUM(total_hours) する必要があります。

また

table_name から total_hours を選択

ループするだけです。

Sum 演算子は既に mysql に組み込まれていますが、varchar から変換されません。

于 2013-07-04T04:20:33.043 に答える