Мне нужно получить количество дней, содержащихся в течение нескольких дат в mysql.
Например: Дата заезда 12-04-2010 Дата выезда 15-04-2010, а разница в день будет 3
Мне нужно получить количество дней, содержащихся в течение нескольких дат в mysql.
Например: Дата заезда 12-04-2010 Дата выезда 15-04-2010, а разница в день будет 3
Как насчет функции 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
, как вы писали.
Обратите внимание, что если вы хотите посчитать 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');
возвращает 0select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');
возвращает 1select timestampdiff(DAY, '2016-04-13 11:00:00', now());
возвращает количество полных 24-х дней с 2016-04-13 11:00:00 до наших дней.Надеюсь, что это поможет кому-то, потому что сначала не так очевидно, почему датичный возвращает значения, которые кажутся неожиданными или неправильными.
Используйте DATEDIFF()
.
Пример из документации:
SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1
Я предпочитаю TIMESTAMPDIFF, потому что вы можете легко изменить устройство, если это необходимо.