1

我在使用具有两个不同日期的 TIMEDIFF 时遇到问题。以下查询“应该”返回 00: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)

有小费吗?哪种方法最简单?谢谢

4

5 回答 5

3

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

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

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

于 2013-08-09T14:23:33.103 回答
2

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

于 2013-08-09T14:21:18.180 回答
2

不要将您的时间戳转换为使用时间,只需输入您的值

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

.从Mysql函数MysqlDate时间函数进一步检查

B/c Time 只会从时间戳中提取时间。所以实际上你正在做。

TIMEDIFF('00:04:50','23:59:59');
于 2013-08-09T14:26:16.727 回答
0

尝试这个:

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'))
于 2013-08-09T14:23:57.840 回答
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()函数允许我们返回负逆,或者如果结果为正,则返回结果。

于 2021-05-01T03:09:55.180 回答