我有一个要求,我需要为某些齿框架分配一些资源。例如
数据库中存在:约翰史密斯 - 2011年3月1日 - 上午6:00至上午7:00 - 经济学 待插入:John Smith - 2011年3月1日 - 上午6:30至7:00 - 数学
这里插入第二行时我想检查这个时间重叠是否重叠 我想跳过insert.How我可以实现这个吗?我在单独的列中有Date,FromTime和ToTime。
答案 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)
)
您可能需要在需要时添加一些数据转换。