如何获取mysql上两个日期之间的差异天数?

时间:2010-03-22 05:36:06

标签: mysql date

我需要获取MySQL上几天内包含的天数。

例如:

  • 入住日期为12-04-2010
  • 查看日期15-04-2010

日差为3

6 个答案:

答案 0 :(得分:227)

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

答案 1 :(得分:33)

请注意,如果您想在2个日期之间计算全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'); (注意与datediff相比的论点的相反顺序)。

一些例子:

  • 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()); 返回自2016-04-13 11:00:00至今已经过了24小时的完整日期

希望它会对某人有所帮助,因为一开始并不明显为什么dateiff会返回看似意外或错误的值。

答案 2 :(得分:16)

使用DATEDIFF()功能。

文档示例:

SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
    -> 1

答案 3 :(得分:6)

我更喜欢TIMESTAMPDIFF,因为如果需要,您可以轻松更改单位。

答案 4 :(得分:3)

获取当前日期与目的地日期之间的天数

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

输出

 335

答案 5 :(得分: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

希望它对以后的人有帮助