web-dev-qa-db-ja.com

MySQLの2つの時間フィールドとの分単位の差

フィールド 'time'を使用してMySQLデータベースをセットアップしました

従来の意味でのHH:MMではなく、イベントが発生した時間であるため、5:45の値を持つイベントは、ゲームに5分45秒残った状態で発生しました。 12:25が残り12分25秒などで発生しました。

合計経過時間を調べたいので、12:25に発生したイベントがあり、次のイベントが5:45に発生した場合、その差を取得できるようにします。 6:40。次に、これを10進数、この場合は6.67として表現したいと思います。

これは可能ですか?

前もって感謝します。

28
NeilG

使うだけ

_TIMEDIFF(fromtime, totime):

SELECT TIMEDIFF("12:25", "5:45");
_

小数が必要な場合は、TIME_TO_SEC()/3600を使用します(秒を渡したと仮定しますが、時間を格納する形式はあいまいであり、SQLはおそらくHH:MMとして解釈します-これを修正できますCONCAT("00:",MinuteSecondField)多分?)-TIME_TO_SEC()/60を使用できます。これはより正確です)

29
Shawn

私にとってこれはうまくいきました:

TIMESTAMPDIFF(MINUTE, T0.created, T0.modified)

リファレンス: https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff

26
A T

同様のものが必要でした。 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)
18
artfulrobot

UNIX_TIMESTAMP(event1)-UNIX_TIMESTAMP(event2)を使用しました。これにより、イベント間の秒数がわかります。 60.0で除算すると、要件に応じて小数が得られます。このソリューションは、列が日付互換の値であることを前提としています。 TIMESTAMPの場合、非常に高速に動作します。

更新:このソリューションはタイムスタンプデータ型でのみ機能し、元の質問のように時間データ型では機能しません。

3
Alex Pakka