我一直在想这个问题。我似乎无法定义一个精确到足以给出我想要的结果的SELECT查询。
我在一张桌子上储存轮班模式。这些换档模式对何时开始和结束没有任何限制(除了它们不能在每台机器上重叠)
这是表的结构(5行示例数据)
我唯一需要选择的信息是:
当前时间(例如01:45)
当前工作日(例如星期二)
问题是轮班时间与00:00重叠。所以我的问题是:
如何根据当前时间和工作日选择当前班次?
Here is an SQL Fiddle of the scenario
谢谢!

最佳答案

你可以用简单的逻辑来做到这一点。如果StartTime < EndTime,则需要测试两个值之间的时间。如果Startime > EndTime,则需要测试两个值之间的时间。这就解决了时间问题:

SELECT *
FROM webreportshiftsetup
WHERE (StartTime < EndTime and time(now()) between StartTime and EndTime or
       StartTime > EndTime and time(now()) not between StartTime and EndTime
      ) and
      dayname(now()) in (StartWeekDay, EndWeekDay)

你的工作日也有类似的问题。但你的问题是关于时间而不是工作日。(这也许是另一个问题。)

10-04 10:42