MySQL TIMEDIFF负值

时间:2013-08-09 14:17:29

标签: mysql

我在使用两个不同日期的TIMEDIFF时遇到问题。以下查询“应该”返回 0时04分51秒

mysql> SELECT TIMEDIFF(TIME('2013-07-21 00:04:50'),TIME('2013-07-20 23:59:59'));
+-------------------------------------------------------------------+

|TIMEDIFF(TIME('2013-07-21 00:04:50'),TIME('2013-07-20 23:59:59')) |

+-------------------------------------------------------------------+

| -23:55:09                                                         |

+-------------------------------------------------------------------+

1 row in set (0.00 sec)

任何提示?哪种方式最简单? 谢谢

5 个答案:

答案 0 :(得分:3)

如果没有日期信息,则必须假设这些值在同一天。保留日期信息,它将按预期工作*:

SELECT TIMEDIFF('2013-07-21 00:04:50','2013-07-20 23:59:59');

* 如果答案小于TIME max 838:59:59

答案 1 :(得分:2)

这是一个正确的结果,因为您将日期仅转换为时间值(您正在剥离意味着操作数的一部分)。如果您想在结果中包含日期影响,您应该使用DATE_DIFF()函数来删除TIME()函数的日期。

答案 2 :(得分:2)

请勿将时间戳转换为使用时间,只需将您的值设为

即可
TIMEDIFF('2013-07-21 00:04:50','2013-07-20 23:59:59')

。从Mysql函数MysqlDate Time Function

进一步检查

B / c时间将仅从时间戳中提取时间。实际上你在做什么。

TIMEDIFF('00:04:50','23:59:59');

答案 3 :(得分:1)

试试这个:

SELECT TIME(TIMEDIFF('2013-07-21 00:04:50','2013-07-20 23:59:59'));
+-------------------------------------------------------------------+

|TIME(TIMEDIFF('2013-07-21 00:04:50','2013-07-20 23:59:59'))

答案 4 :(得分:0)

要测量距离,只需评估结果是负数还是正数,如果为负数,则转换为正数:

SELECT IF( 
    TIMEDIFF( '2013-07-21 00:04:50', '2013-07-20 23:59:59' ) < 0,
    0-TIMEDIFF( '2013-07-21 00:04:50', '2013-07-20 23:59:59' ),
    TIMEDIFF( '2013-07-21 00:04:50', '2013-07-20 23:59:59' )
) AS distance_in_time

IF() 函数允许我们在结果为负时返回负逆,如果结果为正则返回结果。