日付 / 日時の差分
DATEDIFF
* 日付の差分
SELECT DATEDIFF('2016-08-06 12:00:22','2016-08-07 11:00:22');
# -1
TIMEDIFF
* 時間の差分
SELECT TIMEDIFF('2016-08-06 12:00:22','2016-08-07 11:00:22');
# -23:00:00
※ 使用する場合は、以下の「■ TIMEDIFFを使用する際の注意」も考慮にいれて使用すること。
TIMESTAMPDIFF
* 日付/時間の差分
SELECT TIMESTAMPDIFF(DAY,'2016-08-06 12:00:22','2016-08-07 11:00:22');
# 0
TIMESTAMPDIFF(MINUTE,'2016-08-06 12:00:22','2016-08-07 11:00:22');
# 1380
SELECT TIMESTAMPDIFF(SECOND,'2016-08-06 12:00:22','2016-08-07 11:00:22');
# 82800
注意事項
■ TIMEDIFFを使用する際の注意
まず、以下の例からも分かる通り、「838:59:59」以降は値が変わらなくなる。
~~~~
SELECT TIMEDIFF('2016-08-06 12:00:22','2016-07-07 11:00:22');
# 721:00:00
SELECT TIMEDIFF('2016-08-06 12:00:22','2016-06-07 11:00:22');
# 838:59:59
SELECT TIMEDIFF('2016-08-06 12:00:22','2016-05-07 11:00:22');
# 838:59:59
~~~~
これは、以下のURLにある通り、
https://dev.mysql.com/doc/refman/5.6/ja/time.html
「TIME 値の範囲は '-838:59:59.000000' から '838:59:59.000000' 」によるものなので
桁あふれがあることに注意すること。