如何获得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,因为如果需要的话可以很容易地更改单位。