提问者:小点点

Mysql选择记录“23:57:58”和“00:07:58”之间的时间


对于当前时间,我增加了5分钟

$maxTime = date('H:i:s', strtotime('+5 minutes', strtotime($formatedAusDateTime)));
$minTime = date('H:i:s', strtotime('-5 minutes', strtotime($formatedAusDateTime)));

对于时间范围,我得到的是“23:57:58”和“00:07:58”。对于这个时间范围,它没有选择“00:02:45”。 这个方法的错误是什么,我如何选择“00:02:45”行与给定的时间范围。

查询是这样的,

SELECT * FROM v2 WHERE v2.cli = '835' AND (v2.call_time>= '23:57:58' AND v2.call_time<= '00:07:58');

共2个答案

匿名用户

您需要区分$maxtime>; $mintime$maxtime<; $mintime

对于$maxtime>; $mintime:

AND (v2.call_time>= '22:57:58' AND v2.call_time<= '23:07:58');

对于$maxtime<; $mintime:

AND (v2.call_time>='23:57:58' OR v2.call_time<= '00:07:58');

根据您用于与MySQL通信的API,您可以使用准备好的语句和命名参数在一个查询中编写这些信息。

差不多,但正如我所说的,这取决于API。 在本例中,它就是在php PDO中的样子:

AND (
      (
         (:minTime<:maxTime) AND (v2.call_time>=:minTime AND v2.call_time<=:maxTime)
      )
      OR
      (
         (:minTime>:maxTime) AND (v2.call_time>=:minTime OR v2.call_time<=:maxTime)
      )
);

匿名用户

条件'00:02:45'(v2.call_time)>; “23:57:58”为false。

如果您需要比较午夜前后的记录,请比较完整的日期时间,而不仅仅是时间。

例如

SELECT * FROM v2 WHERE v2.cli = '835' AND (v2.call_time>= '2020-06-06 23:57:58' AND v2.call_time<= '2020-06-07 00:07:58');

当然,您需要存储datetime而不是Time。