如何获得mysql上两个date之间的差异天数?
我需要得到在mysql的几个date中包含的天数。
例如:入住date12-04-2010退房date15-04-2010,日差为3
那么DATEDIFFfunction呢?
引用手册页面:
DATEDIFF()返回expr1 – expr2,表示为从一个date到另一个date的值。 expr1和expr2是date或date和时间expression式。 计算中只使用数值的date部分
在你的情况下,你会使用:
mysql> select datediff('2010-04-15', '2010-04-12'); +--------------------------------------+ | datediff('2010-04-15', '2010-04-12') | +--------------------------------------+ | 3 | +--------------------------------------+ 1 row in set (0,00 sec)
但是请注意date应该写为YYYY-MM-DD
,而不是像你发布的DD-MM-YYYY
。
请注意,如果您要计算两个date之间的满24天 ,那么datediff会为您返回错误的值。
正如文档所述:
计算中只使用数值的date部分。
这导致了
select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')
返回1而不是预期的0。
解决scheme是使用select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
(注意与参考文献相反的论点顺序)。
一些例子:
-
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到现在已经过了多less整整24天的时间 。
希望它能帮助某人,因为一开始并不是那么明显,为什么过时的价值会返回似乎是意外或错误的价值。
使用DATEDIFF()
函数。
文档示例:
SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30'); -> 1
我更喜欢TIMESTAMPDIFF,因为如果需要的话可以很容易地更改单位。