Як отримати кількість днів різниці між двома датами на mysql?


162

Мені потрібно отримати кількість днів, що містяться протягом декількох дат на MySQL.

Наприклад:

  • Дата реєстрації є 12-04-2010
  • Перевірте дату 15-04-2010

Різниця дня склала б 3

Відповіді:


262

Що з функцією 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як ви розміщували.


так, я забув про формат дати, коли я поставив питання; p дякую
— Аудель

4
PS YYYY-MM-DD стандарт ISO 8601, тому всі повинні використовувати це. Дуже практична.
— Ернестас Станкевічус

4
Примітка . Перший аргумент повинен бути більшим, ніж другий аргумент datediff()методу, інакше він поверне негативне значення.
— Шашант

38

Зверніть увагу, якщо ви хочете рахувати ПОВНИХ 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'); повертає 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 до цього часу .

Сподіваємось, це комусь допоможе, адже спочатку не так вже й очевидно, чому dateiff повертає значення, які здаються несподіваними чи неправильними.


дивно, що аргументи перегортаються між datediff()і timestampdiff().
— billynoah



5

Отримайте дні між поточною датою до дати призначення

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

вихід

днів

 335

2
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

сподіваюся, що це допоможе комусь у майбутньому

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.