Ответы:
Что насчет функции 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()
метода, иначе он вернет отрицательное значение.
Обратите внимание, что если вы хотите посчитать полные 24 часа между двумя датами, datediff может вернуть вам неправильные значения.
В документации говорится:
В расчете используются только части даты значений.
что приводит к
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 возвращает значения, которые кажутся неожиданными или неправильными.
datediff()
и timestampdiff()
.
Используйте DATEDIFF()
функцию.
Пример из документации:
SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1
Я предпочитаю 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
надеюсь, это поможет кому-то в будущем