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

Posted

技术标签:

【中文标题】如何获取 MySQL 上两个日期之间的差异天数?【英文标题】:How to get the number of days of difference between two dates on MySQL? 【发布时间】:2011-01-30 05:11:30 【问题描述】:

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

例如:

入住日期为12-04-2010 退房日期15-04-2010

天差是 3。

【问题讨论】:

【参考方案1】:
    TIMESTAMPDIFF(DAY,STR_TO_DATE(date_format('2018-01-01', '%d-%m-%YYYY'),'%d-%m-%YYYY'), '2020-01-01') TOTAL_DAYS

TOTAL_DAYS:730 天

【讨论】:

【参考方案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

【讨论】:

【参考方案3】:

如果您想要一个比四舍五入的天数更准确的值:

select timestampdiff(minute, min(date_col), max(date_col))/1440 from table

【讨论】:

【参考方案4】:

请注意,如果您想计算两个日期之间的 FULL 24h 天,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 年 4 月 13 日 11:00:00 到现在已经过去了多少完整的 24 小时

希望它对某人有所帮助,因为起初并不清楚为什么 datediff 返回的值似乎出乎意料或错误。

【讨论】:

奇怪的是参数在datediff()timestampdiff() 之间翻转。【参考方案5】:

获取当前日期到目标日期之间的天数

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

输出

 335

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

使用DATEDIFF() 函数。

文档示例:

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

【讨论】:

【参考方案8】:

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 谢谢 P.S. YYYY-MM-DD 是 ISO 8601 标准,所以每个人都应该使用这个。很实用。 注意datediff()方法的第一个参数必须大于第二个参数,否则返回负值。

以上是关于如何获取 MySQL 上两个日期之间的差异天数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用javascript查找两个日期之间的天数差异

Mysql查询天数的日期差异

mysql: 如何计算指定日期到当前日期之间的天数

c#如何计算两个日期之间相隔天数

如何用PHP+MySQL计算两个日期之间的月份数和其余下的天数?

具有共同 id 的组中具有最大天数的两个日期之间的差异