如何获取 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 上两个日期之间的差异天数?的主要内容,如果未能解决你的问题,请参考以下文章