web-dev-qa-db-ja.com

mysqlの2つの日付の差の日数を取得する方法は?

MySQLのいくつかの日付に含まれる日数を取得する必要があります。

例えば:

  • チェックイン日は12-04-2010です
  • チェックアウト日15-04-2010

日差は3

146
Audel

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として記述する必要があります。

229
Pascal MARTIN

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が予期しないまたは間違っていると思われる値を返す理由は、最初はそれほど明確ではないため、誰かの助けになることを願っています。

33

DATEDIFF() 関数を使用します。

ドキュメントの例:

SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
    -> 1
16
Tobias Cohen

TIMESTAMPDIFF が必要です。これは、必要に応じて単位を簡単に変更できるためです。

6
theblang

現在の日付から目的の日付までの日数を取得する

 SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;

出力

日々

 335
4
vijayabalan
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

それが将来誰かを助けることを願って

2
Developer