Как получить количество дней разницы между двумя датами в mysql?

Мне нужно получить количество дней, содержащихся в течение нескольких дат в mysql.

Например: Дата заезда 12-04-2010 Дата выезда 15-04-2010, а разница в день будет 3

Ответ 1

Как насчет функции 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, как вы писали.

Ответ 2

Обратите внимание, что если вы хотите посчитать FULL 24h days между двумя датами, датифик может вернуть неправильные значения для вас.

Как указано в документации:

В расчете используются только части даты значений.

что приводит к

select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')

возвращает 1 вместо ожидаемого 0.

Решение использует select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); (обратите внимание на противоположный порядок аргументов по сравнению с датированным).

Некоторые примеры:

  • 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()); возвращает количество полных 24-х дней с 2016-04-13 11:00:00 до наших дней.

Надеюсь, что это поможет кому-то, потому что сначала не так очевидно, почему датичный возвращает значения, которые кажутся неожиданными или неправильными.

Ответ 3

Используйте DATEDIFF().

Пример из документации:

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

Ответ 4

Я предпочитаю TIMESTAMPDIFF, потому что вы можете легко изменить устройство, если это необходимо.