我想显示用户输入开始时间的表中的所有记录, 结束时间位于数据库列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"
Codeigniter查询为:
$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)).'"');
答案 0 :(得分:0)
让我们考虑一下这种方法:
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之间,则会返回一个值。