Як отримати кількість днів різниці між двома датами на 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.