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


162

我需要获取MySQL上几个日期中包含的天数。

例如:

  • 入住日期是 12-04-2010
  • 离开日期 15-04-2010

当天差是3

Answers:


261

怎么样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谢谢
Audel,2010年

4
PS YYYY-MM-DD是ISO 8601标准,因此每个人都应该使用它。很实用。
ErnestasStankevičius16年

4
注意:方法的第一个参数必须大于第二个参数datediff(),否则它将返回负值。
Shashanth

38

请注意,如果您要计算两个日期之间的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小时的整整多少天

希望它将对某人有所帮助,因为起初,datediff为什么返回似乎是意外或错误的值并不太明显。


奇怪的是,参数在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

希望对以后的人有帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.