使用MySQL获取当前在线员工

时间:2015-05-22 10:52:10

标签: mysql sql-date-functions datetime-comparison

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

  1. 周日 - 周一,周二,周三,周四,周五,周六,周日
  2. StartTime - 24小时格式。对于前,05:00
  3. EndTime - 24小时格式。对于前,18:00
  4. 有些员工夜班工作。所以,他们的开始时间是20:00&结束时间是05:00(第二天早上)。对于夜班员工,WeekDay将是工作日的开始时间。

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

    由于员工人数增加,整个过程现在花费的时间太长。

    我想直接使用SQL进行检查。 StartTime& Endtime字段为varchar(10),格式为HH:MM

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

1 个答案:

答案 0 :(得分: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
        )
       )
      );