回答:
DATEDIFF関数についてはどうですか?
マニュアルのページを引用する:
DATEDIFF()は、ある日付から別の日付までの日数で表されるexpr1 – expr2を返します。expr1とexpr2は、日付または日付と時刻の式です。値の日付部分のみが計算に使用されます
あなたの場合、あなたが使うでしょう:
mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
| 3 |
+--------------------------------------+
1 row in set (0,00 sec)
ただし、日付はのように記述する必要があります。投稿した日付YYYY-MM-DD
とはDD-MM-YYYY
異なります。
datediff()
。そうでない場合、負の値が返されます。
2つの日付の間の完全な24時間をカウントしたい場合、datediffが誤った値を返す可能性があることに注意してください。
ドキュメントの状態として:
値の日付部分のみが計算に使用されます。
その結果
select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')
期待される0ではなく1を返します。
ソリューションが使用されていますselect timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
(datediffと比較して引数の順序が逆であることに注意してください)。
いくつかの例:
select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
0を返しますselect timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');
1を返しますselect timestampdiff(DAY, '2016-04-13 11:00:00', now());
2016-04-13 11:00:00から現在までの完全な24時間の日数を返します。最初はdatediffが予期しないまたは間違っているように見える値を返す理由が最初ははっきりしないので、それが誰かを助けることを願っています。
datediff()
との間で引数が逆転しているのは奇妙ですtimestampdiff()
。
私が好むTIMESTAMPDIFFを必要であれば、あなたが簡単にユニットを変更することができますので。
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM membership_dates md
出力::
id entity_id start_date end_date days
1 1236 2018-01-16 00:00:00 2018-08-31 00:00:00 227
2 2876 2015-06-26 00:00:00 2019-06-30 00:00:00 1465
3 3880 1990-06-05 00:00:00 2018-07-04 00:00:00 10256
4 3882 1993-07-05 00:00:00 2018-07-04 00:00:00 9130
それが将来誰かを助けることを願って