我的员工表包含三列"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;