检查员工是否被分配到特定时期的最佳方法是什么——SQL



我的员工表包含三列"job_date"、"job_start_time"one_answers"job_end_time"。在我的asp.net web应用程序中,我使用sql查询输入了这三列的时间(job_date=当前日期,job_start_time=上午10:00,job_end_time=下午2.00(。因此,这意味着该员工在输入日期的上午10:00到下午2.00都很忙。因此,当我试图在这段时间间隔内(比如上午11:30到下午12:30(为同一员工分配一份新工作时,系统应该提醒该员工已经在忙于另一份工作。如果已经为该员工分配了工作,测试的最佳查询是什么?

SELECT emp_id,job_date,job_start_time,job_end_time FROM employees WHERE emp_id='EMP001'
emp_id    job_date     job_start_time   job_end_time 
EMP001   17-03-2021       10:00 AM         2.00 PM

让我们假设一个新作业由两个日期时间字段和emp_id定义(您必须将这三个字段作为参数从代码中传递(:

-- new job is on 2021-03-17 10AM : 2021-03-17 12AM
DECLARE @jobStart datetime = '2021-03-17 10:00 AM'
DECLARE @jobEnd datetime = '2021-03-17 11:30 AM'

编辑:根据下面的评论,我已经更新了SQL。

你必须检查,如果有在现有的时间间隔内:

SELECT emp_id
FROM employees
WHERE emp_id = @emp_id
AND (@jobStart BETWEEN job_date + job_start_time AND job_date + job_end_time 
OR @jobEnd BETWEEN job_date + job_start_time AND job_date + job_end_time
OR (@jobStart < job_date + job_start_time AND @jobEnd > job_date + job_end_time)
); 

如果查询返回任何您知道该员工正忙的记录。

返回与时间段有冲突的员工(这似乎是您想要的(:

SELECT e.*
FROM employees e
WHERE emp_id = @emp_id AND
job_date = @job_date AND
job_start_time < @job_end_time AND
job_end_time > @job_start_time;

相关内容

最新更新