我在使用两个不同日期的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)
任何提示?哪种方式最简单? 谢谢
答案 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()
函数允许我们在结果为负时返回负逆,如果结果为正则返回结果。