Відповіді:
Що з функцією 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 годин між двома датами, Dateiff може повернути вам неправильні значення.
Як зазначено в документації:
У розрахунку використовуються лише частини дат значення.
що призводить до
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 до цього часу .Сподіваємось, це комусь допоможе, адже спочатку не так вже й очевидно, чому dateiff повертає значення, які здаються несподіваними чи неправильними.
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
сподіваюся, що це допоможе комусь у майбутньому