我需要获取MySQL上几天内包含的天数。
例如:
12-04-2010
15-04-2010
日差为3
答案 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)
答案 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
希望它对以后的人有帮助