SQL时间重叠/冲突查询

时间:2011-02-28 14:30:14

标签: sql time overlap

我有一个要求,我需要为某些齿框架分配一些资源。例如

数据库中存在:约翰史密斯 - 2011年3月1日 - 上午6:00至上午7:00 - 经济学 待插入:John Smith - 2011年3月1日 - 上午6:30至7:00 - 数学

这里插入第二行时我想检查这个时间重叠是否重叠 我想跳过insert.How我可以实现这个吗?我在单独的列中有Date,FromTime和ToTime。

3 个答案:

答案 0 :(得分:2)

使用转化计算日期:

cast(cast(mydatecolumn as varchar(20)) + ' ' + 
 cast(mytimecolumn as varchar(20)) as datetime)

产量,例如start_datetime和end_datetime

假设变量:@inserted_start_datetime,@ insert_end_datetime,@ name

Insert Into MyTable(<values>)
Where not exists ( 
 select * from table t2 
 where name = @name 
 and (@inserted_start_datetime between start_datetime and end_datetime 
  or @inserted_end_datetime between start_datetime and end_datetime 
  or start_datetime between @inserted_start_datetime and @inserted_end_datetime 
  or end_datetime between @inserted_start_datetime and @inserted_end_datetime ))

<强> EDITED

答案 1 :(得分:0)

如果您的日期是数据库中的时间日期,您可以尝试这样的

如果不存在(从表中选择*,其中name = @name和startTime和endTime之间的@startTime或者startTime和endTime之间的@endTime) 开始

插入。

其中@name = John Smith @startTime = 3/1/2011 6:30 @endTime = 3/1/2011 7:00

答案 2 :(得分:0)

基本上是这样的:

INSERT INTO atable (Name, Date, FromTime, ToTime, Subject)
SELECT
  @Name,
  @Date,
  @FromTime,
  @ToTime,
  @Subject
WHERE NOT EXISTS (
  SELECT * FROM atable
  WHERE Name = @Name AND Date = @Date
    AND (FromTime >= @FromTime AND FromTime < @ToTime  OR
         @FromTime >= FromTime AND @FromTime < ToTime)
)

您可能需要在需要时添加一些数据转换。