无法在代码点火器中检索两个时间范围之间的数据



我想显示用户输入开始时间和结束时间介于数据库列start_time和end_time之间。我已经在两者之间使用了,但它没有给出正确的结果。仅当我的start_time或end_time与数据库值匹配时,才会读取行。例如。仅当我分别在开始时间字段或结束时间字段中输入 07:00:00 或 21:00:00 时。

数据库结构 :

id              int(11) Autoincrement
start_time  datetime NULL    
end_time    datetime NULL

数据库数据:

Start_time                end_time
2019-07-04 07:00:00 2019-07-04 21:00:00

SQL 查询是:

SELECT *
FROM `hours`
WHERE TIME(start_time) BETWEEN "07:15:00" and "20:00:00"
AND TIME(end_time) BETWEEN "07:15:00" and "20:00:00"

代码点火器查询为:

$this->db->where('TIME(start_time) BETWEEN "'. date('H:i:s',strtotime($start_time)). '" and "'. date('H:i:s',strtotime($end_time)).'"');
$this->db->where('TIME(end_time) BETWEEN "'. date('H:i:s',strtotime($start_time)). '" and "'. date('H:i:s',strtotime($end_time)).'"');

链接: http://sqlfiddle.com/#!9/958b05/6

让我们考虑一下这种方法:

SELECT *
FROM `hours`
WHERE 36000 >= TIME_TO_SEC(TIME(start_time))
AND 64800 <= TIME_TO_SEC(TIME(end_time));

http://sqlfiddle.com/#!9/958b05/12

我已将时间值更改为秒,因为我在小提琴中出错。原始查询如下所示:

SELECT *
FROM `hours`
WHERE "10:00:00" >= TIME(start_time)
AND "18:00:00" <= TIME(end_time);
因此,"10:00:00"是

用户输入的开始时间,"18:00:00"是结束时间,并使用它来查找start_time和end_time值。如果用户输入相同或介于 start_time 和 end_time 之间,它将返回一个值。

最新更新