SQL时间重叠/冲突查询
问题描述:
我有,我需要分配一些资源,一些叉架。例如SQL时间重叠/冲突查询
现有数据库中的要求:约翰史密斯 - 3/1/2011 - 6:00 AM到上午7:00 - 经济
插入:约翰史密斯 - 2011年3月1日 - 上午6:30到上午7:00 - 数学
这里插入第二行时,我想检查这个时候重叠,如果它重叠 我想跳过插入。我可以如何实现这一点?我有Date,FromTime和ToTime在单独的列。
答
使用计算日期:
cast(cast(mydatecolumn as varchar(20)) + ' ' +
cast(mytimecolumn as varchar(20)) as datetime)
产量例如start_datetime和end_datetime
假设变量:@inserted_start_datetime,@inserted_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
答
如果您从到日期是在数据库timedates你可以尝试这样的事情
如果不存在(SELECT * FROM表,其中名称=开始时间之间的开始时间和结束时间或@endtime之间@name和@starttime和endTime) begin
做插入。
其中@name =约翰·史密斯 @starttime = 3/1/2011 6:30 @endtime = 3/1/2011七时
端使用转换
答
基本上是这样的:
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)
)
您可能要添加一些数据如果和需要的话转换。
同一问题:http://*.com/questions/781895/checking-for-time-range-overlap-the-watchman-problem-sql – Four 2011-02-28 14:35:37