如何在MySQL中获取两个日期之间的天数差异?

183

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

例如:

  • 入住日期是12-04-2010
  • 退房日期是15-04-2010

这两个日期之间相差的天数为3。

8个回答

300

关于 DATEDIFF 函数怎么样?

引用手册页面:

DATEDIFF() 返回表达式1和表达式2之间以天为单位的差值(expr1 - expr2)。表达式1和表达式2是日期或日期和时间表达式。计算中仅使用值的日期部分。


在你的情况下,你会使用:

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
5
附言:YYYY-MM-DD是ISO 8601标准,所以每个人都应该使用它。非常实用。 - Ernestas Stankevičius
5
注意:datediff() 方法的第一个参数必须大于第二个参数,否则它将返回负值。 - Shashanth

53
请注意,如果您想计算两个日期之间的完整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()之间的参数顺序颠倒真奇怪。 - But those new buttons though..
我有一个问题,如何使用其他时间戳格式,比如DD-MM-YYY? 选择timestampdiff(DAY,'13-04-2016 11:00:00','13-04-2016 11:00:00'); - Sanjay Sahani

19

使用DATEDIFF()函数。

文档示例:

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

8

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


6
获取当前日期到目标日期之间的天数。
 SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;

output

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

0
    TIMESTAMPDIFF(DAY,STR_TO_DATE(date_format('2018-01-01', '%d-%m-%YYYY'),'%d-%m-%YYYY'), '2020-01-01') TOTAL_DAYS

总天数:730天

0
如果您想要比仅仅四舍五入的天数更精确的值:
select timestampdiff(minute, min(date_col), max(date_col))/1440 from table

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接