MySQLのいくつかの日付に含まれる日数を取得する必要があります。
例えば:
12-04-2010
です15-04-2010
日差は3
DATEDIFF関数はどうですか?
マニュアルのページを引用:
DATEDIFF()は、1つの日付から別の日付までの日数の値として表される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
として記述する必要があります。
2つの日付の間でFULL 24h daysをカウントする場合、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');
を返す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が予期しないまたは間違っていると思われる値を返す理由は、最初はそれほど明確ではないため、誰かの助けになることを願っています。
TIMESTAMPDIFF が必要です。これは、必要に応じて単位を簡単に変更できるためです。
現在の日付から目的の日付までの日数を取得する
SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;
出力
335
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
それが将来誰かを助けることを願って