[英]MySQL time between returning false and it should be true
SELECT *
FROM tablename
WHERE
MAKETIME(3,0,0) BETWEEN MAKETIME(23,0,0) AND MAKETIME(5,0,0)
没有返回任何内容,而3:00在23:00和5:00之间。 为什么有人可以解释我如何解决这个问题?
目前还不清楚是什么你实际上是试图在这里做,因为即使3例5和23之间的查询只会返回表中的所有记录。
SELECT MAKETIME(3,0,0) BETWEEN MAKETIME(5,0,0) AND MAKETIME(23,0,0)
返回0,因为3不为5和23之间。
SELECT MAKETIME(5,0,0) BETWEEN MAKETIME(3,0,0) AND MAKETIME(23,0,0)
返回1,因为5在3到23之间。
演示: SQL Fiddle
大概您想总结到前一天,在这种情况下,您可以直接比较datetime
值,但是由于您的问题,您实际上正在使用哪些字段/数据类型尚不清楚。
更新:基于您的评论,我想你想2个比较。 3不在5到23之间,因为时间不会跨越几天。 但是,如果您只关心时间部分,则可以这样处理:
SELECT *
FROM tablename
WHERE YourTime BETWEEN MAKETIME(23,0,0) AND MAKETIME(23,59,59)
OR YourTime BETWEEN MAKETIME(0,0,0) AND MAKETIME(5,0,0)
请记住, BETWEEN
是包容性的,所以如果您的截止时间是凌晨5点,则您可能希望将其设为MAKETIME(4,59,59)
因此它包括4:59但不包括5:00
函数MAKETIME返回根据小时,分钟和第二个参数计算得出的时间值:
mysql> SELECT MAKETIME(3,0,0),MAKETIME(23,0,0),MAKETIME(5,0,0)
-> '03:00:00', '23:00:00', '05:00:00'
当然,3不在23 AND 5之间,它将返回false。 但是是的,3AM实际上是在11PM和5AM之间,那么您如何解决这个问题?
让我们将23作为您的START_TIME,将5作为您的END_TIME。
由于START_TIME具有END_TIME之前发生,如果不是这种情况(23> 5)的装置,在未来天的间隔辊。
我会尝试用这样的查询:
SELECT *
FROM yourtable
WHERE
(MAKETIME(START_TIME,0,0)<=MAKETIME(END_TIME,0,0) AND MAKETIME(3,0,0) BETWEEN MAKETIME(START_TIME,0,0) AND MAKETIME(END_TIME,0,0))
OR
(MAKETIME(START_TIME,0,0)>MAKETIME(END_TIME,0,0) AND NOT (MAKETIME(3,0,0) BETWEEN MAKETIME(START_TIME,0,0) AND MAKETIME(END_TIME,0,0)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.