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

What is the best way to check if an employee is assigned for particular period - SQL

我的员工 table 包含三列 'job_date'、'job_start_time' 和 'job_end_time'。在我的 asp.net 网络应用程序中,我使用 sql 查询输入了这三列的时间(job_date=当前日期,job_start_time=10:00 AM,job_end_time=下午 2 点)。因此,这意味着该员工在输入日期的 10:00 AM 到 2.00 PM 忙。因此,当我尝试在此间隔之间的时间段内(比如 11:30 AM 到 12:30 PM 之间)为同一员工分配新工作时,系统应该提醒员工已经忙于另一份工作。测试是否已经为该员工分配了工作的最佳查询是什么?

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)
    ); 

如果查询returns任何记录你知道员工很忙。

致 return 与时间段有冲突的员工(这似乎是你想要的):

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;