2010-03-22 62 views

回答

171

怎么样的DATEDIFF功能?

引述手册的页面:

DATEDIFF()返回表达式1 - 表达式2 表示为从一个 日至其它在天的值。 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

+0

是的,当我提出问题时,我忘记了日期格式; p 谢谢 – Audel 2010-03-22 08:18:41

+2

P.S. YYYY-MM-DD是ISO 8601标准,所以每个人都应该使用它。非常实用。 – 2016-10-18 12:55:40

+0

**注意**:第一个参数必须大于'datediff()'方法的第二个参数,否则它将返回负值。 – Shashanth 2017-06-30 08:41:08

14

使用DATEDIFF()函数。从文档

例子:

SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30'); 
    -> 1 
25

请注意,如果你想计数丰满24天在2个日期之间,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有多少全日24小时已经过去了:00直到现在

希望它能帮助某人,因为一开始并不是那么明显,为什么datediff返回的值似乎是意外或错误的。