MySQLでDATETIME型の時刻差を計算
MySQL上で、DATETIME型の時間差を出す方法です。
僕の場合、出した値を合計して、その後PHPで扱う流れでしたので、UNIX_TIMESTAMPで変換してから差を出す方法を採用しました。
複数の方法で結果を出してみる
左2つのデータの差分を、カラム名の方法で出しています。
そのまま減算
数字列の差分になります。
SELECT datetime1 - datetime2
FROM table_name
FROM table_name
UNIXTIMESTAMP化してから計算
秒数で取得できます。
SUBTIME()で計算
後ろの引数は時刻ではなく時間を表す値でなければならないようです。
SELECT SUBTIME(datetime1,datetime2)
FROM table_name
FROM table_name
TIMEDIFF()で計算
ちゃんとフォーマットされた時刻差が出るのですが…
SELECT TIMEDIFF(datetime1,datetime2)
FROM table_name
FROM table_name
UNIXTIMESTAMPで取得すれば、その後gmdate()でそのまま時間っぽく表示できるので扱いやすいです。
TIMEDIFFの値は、PHPで取得する場合、単純な減算の値と同様の数字列(00:30:00は3000)としての取得になります。これらもPHP上で整形すれば時間データ化できますが、ひと手間増えることになります。日付の差であればDATEDIFFやDATE()してからの減算であっさり解決できるんですけどね。