5

時間を格納するために decimal データ型を使用して、MySQL に「hours_spent」というフィールドを作成しました。値は、この 1.30、2.30 などのように保存されます (1 時間 30 分、2 時間 30 分)。

さまざまな時間値の合計を計算したい。

時間の合計は私が期待したものではありません: 1.30 + 2.30 = 3.60 でしたが、私は 4.00 を期待していました。

Hours_spent フィールドをカウントするために、MySQL の SUM 関数を使用しました。値が 0.30 + 1.50 = 1.80 の場合、私は 2.20 を期待していました。

私の最初の間違いは、時刻データ型の代わりに 10 進数型を使用したことですが、データ型を変更できません。

それで、時間値を合計して期待どおりの結果を得る方法はありますか?

ありがとう

4

3 に答える 3

3

sqlfiddle でデモを用意しました。必要に応じてそこで試すことができます。

http://www.sqlfiddle.com/#!2/c9afc/2

クエリのサンプルは次のとおりです。

select @indexer:=instr(dateasdecimal, '.')
, left(dateasdecimal, @indexer-1) * 60 + substr(dateasdecimal, @indexer+1)  as totalMinutes
from testtable;

select @indexer:=instr(dateasdecimal, '.')
, sum(left(dateasdecimal, @indexer-1) * 60 + substr(dateasdecimal, @indexer+1))  as totalMinutes
from testtable;

注: 質問への回答を受け入れることを忘れないでください: https://meta.stackexchange.com/a/65088/200585

于 2012-11-27T16:56:23.887 に答える
3

10 進数を秒に変換するには、次のようにします。

truncate(hours_spent,0)*60+(hours_spent-truncate(hours_spent,0))*100

そして、合計を簡単に行うことができます。次に、次のように秒を 10 進数形式に戻すことができます。

truncate(seconds/60,0)+truncate(mod(seconds, 60)/100,2)
于 2012-11-27T18:31:44.147 に答える