【发布时间】:2018-08-19 04:42:45
【问题描述】:
我有表和记录是这样的
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' 的范围内找到 start_date 和 end_date。所以我使用了下面的查询
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
现在我必须找到 place_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))
我的预期输出是
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
【问题讨论】:
-
第 1 步:使用适当的日期时间数据类型将日期和时间存储为单个实体
标签: mysql