MySQL-比较两个负时间值

时间:2019-01-15 07:31:30

标签: mysql sql sql-timestamp

我的SQL查询中有以下条件语句:

WHERE TIMEDIFF("03:00:00", VARIABLE) >= "00:05:00"

以上内容按预期工作。如果从 TIMEDIFF()返回的值大于5分钟,则将返回它代表的记录。如果 TIMEDIFF()返回-02:00:00-00:05:0000:04:00,则该记录将被排除。如果返回00:06:0001: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似乎很难将两个负时间值相互比较。

有什么办法可以准确地写出这个比较?

3 个答案:

答案 0 :(得分:3)

使用TIME_TO_SEC将时间格式转换为整数秒,然后比较您的值

如下所示

where TIME_TO_SEC(TIMEDIFF("03:00:00", VARIABLE))>=-300

答案 1 :(得分:0)

嗯,您可以使用TIMESTAMPDIFFdocumentation),为此,您需要将硬编码值转换两次(如果将其直接转换为datetime,则{ {1}}无法正常工作),如下所示:

TIMESTAMPDIFF

提及函数将返回一个整数,可以很容易地与它进行比较:)

答案 2 :(得分:0)

Mysql可以在-838:59:59838: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