MySQLでDATETIME型の時刻差を計算

MySQL上で、DATETIME型の時間差を出す方法です。
僕の場合、出した値を合計して、その後PHPで扱う流れでしたので、UNIX_TIMESTAMPで変換してから差を出す方法を採用しました。

複数の方法で結果を出してみる

左2つのデータの差分を、カラム名の方法で出しています。

そのまま減算

数字列の差分になります。

SELECT datetime1 - datetime2

FROM table_name

UNIXTIMESTAMP化してから計算

秒数で取得できます。

SELECT UNIX_TIMESTAMP( datetime1 ) - UNIX_TIMESTAMP( datetime2 )

FROM table_name

SUBTIME()で計算

後ろの引数は時刻ではなく時間を表す値でなければならないようです。

SELECT SUBTIME(datetime1,datetime2)

FROM table_name

TIMEDIFF()で計算

ちゃんとフォーマットされた時刻差が出るのですが…

SELECT TIMEDIFF(datetime1,datetime2)

FROM table_name


UNIXTIMESTAMPで取得すれば、その後gmdate()でそのまま時間っぽく表示できるので扱いやすいです。

$time = gmdate( 'H:i' , $Mysqlから取得した値);

//$timeの中身は"00:30"

TIMEDIFFの値は、PHPで取得する場合、単純な減算の値と同様の数字列(00:30:00は3000)としての取得になります。これらもPHP上で整形すれば時間データ化できますが、ひと手間増えることになります。
日付の差であればDATEDIFFやDATE()してからの減算であっさり解決できるんですけどね。