你的圆括号在错误的地方。所以你用1个参数调用TIMEDIFF()
,并用2个参数调用MINUTE()
。此外,您不需要使用SELECT
来获得TIME(NOW())
,您可以将该函数调用用作参数。
SELECT *
FROM exampleTable
WHERE MINUTE(TIMEDIFF(TIME(NOW()), timeC)) < 5
但是,这仍然存在问题。 TIMEDIFF()
如果timeC
当天晚些时候可以返回负值时间,但MINUTE()
总是返回分钟的正值,所以这将匹配5分钟前到5分钟后的任何值。简单地将时间与范围进行比较会更好:
SELECT *
FROM exampleTable
WHERE timeC BETWEEN TIME(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND TIME(NOW())
有一个重要问题。如果您在午夜后不久执行此查询,则提前5分钟的时间将比前一天晚。例如,如果它当前是00:02
,则提前5分钟将是23:57
,并且没有任何内容会与BETWEEN
表达式匹配。你需要检查:
SELECT *
FROM exampleTable
WHERE CASE
WHEN TIME(NOW()) >= '00:05'
THEN timeC BETWEEN TIME(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND TIME(NOW())
ELSE timeC BETWEEN '00:00' AND TIME(NOW())
OR
timeC BETWEEN TIME(DATE_SUB(NOW(), INTERVAL 5 MINUTE)) AND '23:59:59'
END
由于'TIME'类型只包含时间,即不知道它属于哪个日期,所以我不确定你想要查询什么,真的:) – AKX
@akx,这个问题受到限制,使得被检查的记录总是从查询运行当天的较早时刻开始。 –