【MySQL】 MySQLで、 日付 / 日時 を扱うには...

日付 / 日時の差分

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' 」によるものなので
桁あふれがあることに注意すること。




関連記事

MySQL】 現在日時に近い順にソートし、重複を排除する

http://blogs.yahoo.co.jp/dk521123/36274526.html