フィールド 'time'を使用してMySQLデータベースをセットアップしました
従来の意味でのHH:MMではなく、イベントが発生した時間であるため、5:45の値を持つイベントは、ゲームに5分45秒残った状態で発生しました。 12:25が残り12分25秒などで発生しました。
合計経過時間を調べたいので、12:25に発生したイベントがあり、次のイベントが5:45に発生した場合、その差を取得できるようにします。 6:40。次に、これを10進数、この場合は6.67として表現したいと思います。
これは可能ですか?
前もって感謝します。
使うだけ
_TIMEDIFF(fromtime, totime):
SELECT TIMEDIFF("12:25", "5:45");
_
小数が必要な場合は、TIME_TO_SEC()/3600
を使用します(秒を渡したと仮定しますが、時間を格納する形式はあいまいであり、SQLはおそらくHH:MMとして解釈します-これを修正できますCONCAT("00:",MinuteSecondField)
多分?)-TIME_TO_SEC()/60
を使用できます。これはより正確です)
私にとってこれはうまくいきました:
TIMESTAMPDIFF(MINUTE, T0.created, T0.modified)
リファレンス: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff
同様のものが必要でした。 2つの便利な関数: TIME_TO_SEC および [〜#〜] subtime [〜#〜] 。
例えば時間フィールドが通常のHH:MM時間であった場合、
SELECT (TIME_TO_SEC(end_time) - TIME_TO_SEC(start_time))/60 AS `minutes`
あなたの場合、私が理解しているように、時代は逆向きです。 12:00<6:00
したがって、end_timeとstart_timeはスワップが必要になります。
HH:MM:SSの出力が必要な場合は、次のようにします。
SELECT SUBTIME(end_time, start_time)
UNIX_TIMESTAMP(event1)-UNIX_TIMESTAMP(event2)を使用しました。これにより、イベント間の秒数がわかります。 60.0で除算すると、要件に応じて小数が得られます。このソリューションは、列が日付互換の値であることを前提としています。 TIMESTAMPの場合、非常に高速に動作します。
更新:このソリューションはタイムスタンプデータ型でのみ機能し、元の質問のように時間データ型では機能しません。