MySQL在HH:MM之间获得时间

时间:2014-06-17 22:28:42

标签: php mysql sql date

我得到以下查询,显示在“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开放的餐厅?

非常感谢帮助!
谢谢!

2 个答案:

答案 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 */