我尝试搜索这个问题,但找不到任何与 mySQL 相关的内容。
我有一个包含各种数据的表,但对于这个问题,相关数据是星期几、开始时间和结束时间。
我正在尝试获取与一周中某一天匹配的记录,其中 now() 在匹配时间范围内。然而,问题是开始时间可以大于结束时间,反之亦然,或者时间也可能只是 00:00:00。
表的相关字段和示例数据page_data
:
field_value | start_time | end_time
------------+------------+---------
Monday | 17:00:00 | 08:00:00
Tuesday | 17:00:00 | 08:00:00
Wednesday | 17:00:00 | 08:00:00
Thursday | 17:00:00 | 08:00:00
Friday | 17:00:00 | 08:00:00
Saturday | 00:00:00 | 00:00:00
Sunday | 00:00:00 | 00:00:00
一些注意事项:
- 00:00:00 - 00:00:00 基本上意味着全天跑步
- 如果开始时间大于结束时间,例如 17:00 - 8:00,则意味着从下午 5 点运行到第二天早上 8 点。
我尝试过now() between start_time and end_time
,但这不包括 start_time > end_time。
以下是我到目前为止所拥有的,但它在不应该返回时返回。
10:00:00 是一个测试时间,不应该返回任何内容,但它确实返回了。
为了测试我对时间进行硬编码而不是使用now()
如果我删除or ('10:00:00' between end_time and start_time)
那么 start_time 更大将不会返回任何内容。
select * from page_data
where field_value = 'Friday'
and (
(start_time = '00:00:00' and end_time = '00:00:00') or
('10:00:00' between start_time and end_time) or
('10:00:00' between end_time and start_time)
)
我对可以用来考虑这些考虑因素的查询感到困惑:
- 开始时间 > 结束时间
- 结束时间 > 开始时间
- 结束时间 && 开始时间 = 00:00:00
谢谢