2017-02-25 49 views
0

我想创建一个考试调度系统。现在我的目标是避免用户插入冲突的时间安排为同一个房间在SQL Server 2008中 例如:SQL调度系统

的房间还有的

02/27/2017 4:00pm - 5:00pm 

所以如果有什么时间表为室用户输入

02/27/2017 3:50pm - 5:10pm 

显然这是冲突。

如果我要使用显然它不会用于给定的示例输入。

请帮忙。 谢谢

+1

。下午4点在3:50和5:10之间。只要确保你使用的是正确的数据类型。如果您有特定的代码问题,请发布您尝试过的代码以及您正在使用的数据库类型(即MySQL或SQL Server) –

回答

0

像尼克说的,between正是你所需要的。在这种情况下,与existsnot exists一起,您将能够避免计划冲突。 只有在同一房间没有进入同一房间的日期条目时,才会执行insert,该日期的起始时间或结束时间介于新时间段(表示冲突)之间。

请看下面的例子:

SQL Fiddle

MS SQL Server 2008的架构设置

CREATE TABLE schedule 
    ([room] int, [date] date, [start] time, [finish] time) 
; 

INSERT INTO schedule 
    ([room], [date], [start], [finish]) 
SELECT 202, '2017-02-26', '16:00', '17:00' 
WHERE NOT EXISTS (SELECT * 
        FROM schedule 
        WHERE room = '202' AND date = '2017-02-26' AND 
        (start BETWEEN '16:00' AND '17:00' 
        OR finish BETWEEN '16:00' AND '17:00')) 
; 

INSERT INTO schedule 
    ([room], [date], [start], [finish]) 
SELECT 202, '2017-02-26', '15:50', '17:10' 
WHERE NOT EXISTS (SELECT * 
        FROM schedule 
        WHERE room = '202' AND date = '2017-02-26' AND 
        (start BETWEEN '15:50' AND '17:10' 
        OR finish BETWEEN '15:50' AND '17:10')) 
; 

INSERT INTO schedule 
    ([room], [date], [start], [finish]) 
SELECT 202, '2017-02-26', '15:00', '15:59' 
WHERE NOT EXISTS (SELECT * 
        FROM schedule 
        WHERE room = '202' AND date = '2017-02-26' AND 
        (start BETWEEN '15:00' AND '15:59' 
        OR finish BETWEEN '15:00' AND '15:59')) 
; 

查询1

SELECT * 
FROM schedule 

Results

| room |  date |   start |   finish | 
|------|------------|------------------|------------------| 
| 202 | 2017-02-26 | 16:00:00.0000000 | 17:00:00.0000000 | 
| 202 | 2017-02-26 | 15:00:00.0000000 | 15:59:00.0000000 | 

在应用程序中,使它看起来像这样:

伪:

SELECT count(*) 
FROM schedule 
WHERE room = '202' AND date = '2017-02-26' AND 
     (start BETWEEN '15:00' AND '15:59' 
     OR finish BETWEEN '15:00' AND '15:59') 

if count(*) = 0 then 
    INSERT INTO schedule 
     ([room], [date], [start], [finish]) 
    SELECT 202, '2017-02-26', '15:00', '15:59' 
else 
    ERROR "CONFLICT WITH ANOTHER SCHEDULE" 
end if 
它只是取决于你检查什么_will_工作之间