我得到以下查询,显示在“mon_o”和“mon_c”之间打开的餐馆
SELECT name FROM `restaurants` WHERE "18:00" BETWEEN mon_o AND mon_c
这应该可行,但我想延长餐厅的营业时间,因此mon_c (即周一关闭)可以超过24:00。 因此,例如,在我上面的查询中,将在15:00和04:00之间营业的餐馆不会返回,因为04:00不算作第二天,它被计为与mon_o 同一天(周一开放时间) )的。
如何编辑我的查询,以便可以退回17:00和02:00开放的餐厅?
非常感谢帮助!
谢谢!
答案 0 :(得分:2)
如果mon_c
小于mon_o
,最简单的解决方案就是假设它是过夜午夜关闭时间:
SELECT name FROM `restaurants`
WHERE (mon_o < mon_c AND "18:00" BETWEEN mon_o AND mon_c)
OR (mon_o > mon_c AND ("18:00" > mon_o OR "18:00" < mon_c))
答案 1 :(得分:1)
因此,您需要在查询中捕获两个方案。
场景#1 - 关闭时间是&lt; 23:59
在这种情况下,mon_c(或任何一天)将始终是&gt; mon_o,所以你当前的where子句将按原样运行
场景#2 - 关闭时间是&gt; 23:59 在这种情况下,mon_c总是&lt; mon_o,所以这就是你需要解决的问题。
您可以通过构建WHERE子句的两个部分来实现此目的,一个部分涵盖每个场景。
WHERE
(
mon_c > mon_0
AND
? BETWEEN mon_o AND mon_c
) /* scenario #1 */
OR
(
mon_c < mon_o
AND
(
? > mon_o
OR
? < mon_c
)
) /* scenario #2 */