我的SQL查询中有以下条件语句:
WHERE TIMEDIFF("03:00:00", VARIABLE) >= "00:05:00"
以上内容按预期工作。如果从 TIMEDIFF()返回的值大于5分钟,则将返回它代表的记录。如果 TIMEDIFF()返回-02:00:00
,-00:05:00
或00:04:00
,则该记录将被排除。如果返回00:06:00
或01:02:00
,则相应的记录将包含在查询结果中。
我需要将上述条件语句更新为:
WHERE TIMEDIFF("03:00:00", VARIABLE) >= "-00:05:00"
在更新的语句中,结果中仅应包含大于或等于-00:05:00
的值。我注意到情况并非如此。甚至 TIMEDIFF()返回的具有相应较大负值的记录-即-05:00:00
,-02:00:00
,-00:06:00
-与此新的条件语句一起返回。
MySQL似乎很难将两个负时间值相互比较。
有什么办法可以准确地写出这个比较?
答案 0 :(得分:3)
使用TIME_TO_SEC
将时间格式转换为整数秒,然后比较您的值
如下所示
where TIME_TO_SEC(TIMEDIFF("03:00:00", VARIABLE))>=-300
答案 1 :(得分:0)
嗯,您可以使用TIMESTAMPDIFF
(documentation),为此,您需要将硬编码值转换两次(如果将其直接转换为datetime
,则{ {1}}无法正常工作),如下所示:
TIMESTAMPDIFF
提及函数将返回一个整数,可以很容易地与它进行比较:)
答案 2 :(得分:0)
Mysql可以在-838:59:59
到838:59:59
的范围内工作。
首先,您应确保TIMEDIFF()
返回正确的时间。例如,在时间为负的情况下,TIMEDIFF()
可以使用jdbc driver
返回错误。
您可以通过简单的查询进行检查:
SELECT TIMEDIFF("02:55:00", "03:00:00")
如果结果为'-05:00:00',则驱动程序可以正常工作。
第二,您应该手动将时间值转换为时间类型,因为MySQL会错误地将负时间值转换为时间类型。
WHERE TIMEDIFF("03:00:00", VARIABLE) >= TIME("-00:05:00")
例如:
SELECT TIMEDIFF("03:00:00", "3:00:00") >= "-00:05:00"; // return true
SELECT TIMEDIFF("03:00:00", "3:10:00") >= "-00:05:00"; // return true
此查询始终返回true
,但是如果您将'-00:05:00'强制转换为时间类型,则此查询将返回正确的结果
SELECT TIMEDIFF("03:00:00", "3:00:00") >= TIME("-00:05:00"); // return true
SELECT TIMEDIFF("03:00:00", "3:10:00") >= TIME("-00:05:00"); // return false