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

Aud*_*del 154 mysql date

我需要在MySQL的几个日期内获得包含的天数.

例如:

  • 入住日期是 12-04-2010
  • 离开日期 15-04-2010

日差为3

Pas*_*TIN 240

怎么样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)
Run Code Online (Sandbox Code Playgroud)

但请注意,日期应该写成YYYY-MM-DD,而不是DD-MM-YYYY像你发布的那样.

  • PS YYYY-MM-DD是ISO 8601标准,所以每个人都应该使用它.非常实用. (4认同)
  • **注意**:第一个参数必须大于datediff()方法的第二个参数,否则它将返回负值。 (2认同)

Kon*_*ski 36

请注意,如果您想在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会返回看似意外或错误的值.


Tob*_*hen 16

使用该DATEDIFF()功能.

文档示例:

SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
    -> 1
Run Code Online (Sandbox Code Playgroud)


the*_*ang 6

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


小智 6

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

 SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;
Run Code Online (Sandbox Code Playgroud)

输出

 335
Run Code Online (Sandbox Code Playgroud)