0

我有员工在不同的班次和工作日工作。他们的班次详细信息以下列格式保存在班次表中。

  1. 工作日 - 周一、周二、周三、周四、周五、周六、周日
  2. 开始时间 - 24 小时格式。例如,05:00
  3. EndTime - 24 小时制。例如,18:00

一些员工上夜班。因此,他们的开始时间是 20:00,结束时间是 05:00(第二天早上)。对于夜班员工,WeekDay 将是 Starttime 工作日。

我需要向员工展示现在在线/工作。这是实时数据。我目前正在提取当天的记录,然后使用 Java 验证当前时间是否在开始和结束时间之内。如果是,则显示该记录,否则忽略。

由于员工的增加,整个过程现在需要很长时间。

我想直接使用 SQL 来做这个检查。StartTime 和 Endtime 字段是 varchar(10) 并且始终具有 HH:MM 格式

是否可以直接在 SQL 中执行此操作?

4

1 回答 1

2

如果您使用日期/时间格式存储实际时间,那真的会更容易。但是,鉴于数据的格式,您可以使用显式逻辑来确定当前轮班人员:

select ws.*
from workshifts ws
where (ws.StartTime < ws.EndTime and
       date_format(now(), '%h:%i') >= ws.StartTime and 
       date_format(now(), '%h:%i') <= ws.EndTime and
       date_format(now(), '%W') = ws.Weekday
      ) or 
      (ws.StartTime > ws.EndTime and
       ((date_format(now(), '%h:%i') >= ws.StartTime and 
         date_format(now(), '%W') = ws.Weekday
        ) or
        (date_format(now(), '%h:%i') <= ws.EndTime and
         date_format(date_sub(now(), interval 1 day), '%W') = ws.Weekday
        )
       )
      );
于 2015-05-22T11:09:40.743 回答