检查员工是否在特定时期分配的最佳方法是什么 - 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;
我的员工 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;