MySQL约会奇怪的结果

时间:2015-04-25 18:40:59

标签: mysql datediff

我对dateiff函数的结果很奇怪。 对于不同的和相同的时间戳,它为零?

select datediff('2015-04-25 20:37:45','2015-04-25 05:20:00');
+-------------------------------------------------------+
| datediff('2015-04-25 20:37:45','2015-04-25 05:20:00') |
+-------------------------------------------------------+
|                                                     0 |
+-------------------------------------------------------+

select datediff('2015-04-25 20:37:45','2015-04-25 20:37:45');
+-------------------------------------------------------+
| datediff('2015-04-25 20:37:45','2015-04-25 20:37:45') |
+-------------------------------------------------------+
|                                                     0 |
+-------------------------------------------------------+

3 个答案:

答案 0 :(得分:2)

datediff将对日期进行计算并找出天数的差异, 但是,您可以timestampdiff使用hour作为<{1}},min等不同的差异

mysql> select timestampdiff(hour,'2015-04-25 05:20:00','2015-04-25 20:37:45') as hour;
+------+
| hour |
+------+
|   15 |
+------+
1 row in set (0.00 sec)

答案 1 :(得分:1)

如果你看一下MySQL手册:

  

<强> DATEDIFF
  DATEDIFF()返回expr1 - expr2,表示为从一个日期到另一个日期的天数值。 expr1和expr2是日期或日期和时间表达式。在计算中仅使用值的日期部分

所以你得到的是正确的。

如果您正在寻找时差,我建议您查看TIMEDIFFTIMESTAMPDIFF

如果您希望在几分钟内获得差异,最好的方法是TIMESTAMPDIFF

以下是您可以执行此操作的示例:

SELECT TIMESTAMPDIFF(MINUTE, '2015-04-25 20:37:45','2015-04-25 05:20:00');
+--------------------------------------------------------------------+
| TIMESTAMPDIFF(MINUTE, '2015-04-25 20:37:45','2015-04-25 05:20:00') |
+--------------------------------------------------------------------+
|                                                               -917 |
+--------------------------------------------------------------------+

答案 2 :(得分:0)

如果要比较低于天的差异的两个时间戳,则应使用TIMEDIFF()函数而不是DATEDIFF。例如:

select TIMEDIFF('2015-04-25 20:37:45','2015-04-25 05:20:00');

或结果为秒:

select TIME_TO_SEC(TIMEDIFF('2015-04-25 20:37:45','2015-04-25 05:20:00'));

更多详情:

MySQL: how to get the difference between two timestamps in seconds

希望这有助于:)