Mysql 如何查找两个日期和时间范围内的记录

Mysql 如何查找两个日期和时间范围内的记录,mysql,Mysql,我有一张桌子,记录是这样的 id | list_id |venue_id |name | start_date | end_date |start_time | end_time 1 |1 | 4 |xyz |2018-08-20 |2018-09-02|5:00 AM |11:00 AM 2 |2 | 3 |oig |2018-08-20 |2018-08-30|9:00 AM |12:00 PM 3 |1

我有一张桌子,记录是这样的

id | list_id |venue_id |name | start_date | end_date |start_time | end_time 
1  |1        | 4       |xyz  |2018-08-20  |2018-09-02|5:00 AM     |11:00 AM
2  |2        | 3       |oig  |2018-08-20  |2018-08-30|9:00 AM     |12:00 PM
3  |1        | 4       |sad  |2018-08-30  |2018-09-10|11:30 AM    |3:00 PM
4  |1        | 4       |sfd  |2018-08-28  |2018-09-18|9:00 AM     |1:00 PM
5  |1        | 4       |khg  |2018-08-29  |2018-09-10|6:00 PM     |11:00PM
现在,我必须在
'2018-08-18'
'2018-09-28'
之间找到开始日期和结束日期。所以我用下面的查询

SELECT * FROM `list` WHERE `venue_id` = '4' and ((start_date between '2018-08-18' and '2018-09-28')OR (end_date between '2018-08-18' and '2018-09-28'))
所以我得到了一个正确的输出

id | list_id |venue_id |name | start_date | end_date |start_time | end_time 
1  |1        | 4       |xyz  |2018-08-20  |2018-09-02|5:00 AM     |11:00 AM
3  |1        | 4       |sad  |2018-08-30  |2018-09-10|11:30 AM    |3:00 PM
4  |1        | 4       |sfd  |2018-08-28  |2018-09-18|9:00 AM     |1:00 PM
5  |1        | 4       |khg  |2018-08-29  |2018-09-10|6:00 PM     |11:00PM
现在我必须找到场地的日期和时间_id=4,范围是
'2018-08-18'
'2018-09-28'
“5:00AM”
“5:00PM”
,所以我尝试了查询,但它只显示前两条记录。我认为应该显示三条记录。对吧?

SELECT * FROM `batch_list` WHERE `batch_venue_id` = '4' and ((start_date between '2018-08-18' and '2018-09-28')OR (end_date between '2018-08-18' and '2018-09-28')) and ((start_time<=end_time and "5:00 AM">=start_time and "5:00 PM" <= end_time)) OR ((end_time<=start_time and "5:00 AM"<=end_time or "5:00 PM" >= start_time)) 

我认为当您创建表时,您将end\u timestart\u time列声明为
varchar
type,而不是
time
type。所以,它会比较字符串。例如,“9:10 AM”>“9:00 PM”(“1”大于“0”)

我创建了一个表并插入了您的数据。我得到了你期望的结果

CREATE TABLE SampleTable(id int auto_increment非空,
list_id int,
地点(国际),
项目名称varchar(3),
开始日期,
结束日期,
开始时间,
结束时间,
主键(id));
插入样本表(列表id、场馆id、项目名称、开始日期、结束日期、开始时间、结束时间)
价值观
(1,4,'xyz','2018-08-20','2018-09-02','5:00','11:00'),
(2,3,'oig','2018-08-20','2018-08-30','9:00','12:00'),
(1,4,“悲伤”、“2018-08-30”、“2018-09-10”、“11:30”、“15:00”),
(1,4,'sfd','2018-08-28','2018-09-18','9:00','13:00'),
(1,4,'khg','2018-08-29','2018-09-10','18:00','11:00');
从sampletable中选择*
其中地点id=4
(开始日期在“2018-08-18”和“2018-09-28”之间)或(结束日期在“2018-08-18”和“2018-09-28”之间)

及((开始时间感谢您的回复,给我一些时间来实现它。我正在插入时间,如上午5:00、下午1:00、下午5:30等。开始时间和结束时间列的数据类型是什么?请分享否决票的原因。没有理由,我们无法理解答案中的问题。正如我上面提到的,这将比较字符串。在我的示例中e、 我已将开始时间和结束时间声明为
time
datatype。步骤1:使用适当的datetime数据类型将日期和时间存储为单个实体
id | list_id |venue_id |name | start_date | end_date |start_time | end_time 
1  |1        | 4       |xyz  |2018-08-20  |2018-09-02|5:00 AM     |11:00 AM
3  |1        | 4       |sad  |2018-08-30  |2018-09-10|11:30 AM    |3:00 PM
4  |1        | 4       |sfd  |2018-08-28  |2018-09-18|9:00 AM     |1:00 PM