日期:2014-05-17  浏览次数:20684 次

请假判断区间是否有请假
本帖最后由 chenfeng_cstp 于 2013-04-18 17:35:28 编辑
原有数据:
请假开始日期     结束日期 开始时间 结束时间
2013-04-18 2013-04-19  08:00 15:00

先输入
2013-04-17 2013-04-18 08:00 13:00

其中18号两个单据就有重复的情况


区间时间? 时间 sql

------解决方案--------------------


create table che
(请假开始日期 varchar(12),
 结束日期 varchar(12),
 开始时间 varchar(12),
 结束时间 varchar(12)
)

insert into che
select '2013-04-18', '2013-04-19', '08:00', '15:00' union all
select '2013-04-17', '2013-04-18', '08:00', '13:00'


select  请假开始日期,
        结束日期,
        开始时间,
        结束时间,
        row_number() over(order by getdate()) 'rn'
into #t
from che

if exists(
select * 
from #t a
where exists
(select 1 from #t b 
 where b.rn<>a.rn and
 cast(a.请假开始日期+' '+a.开始时间 as datetime) between  
 cast(b.请假开始日期+' '+b.开始时间 as datetime)
 and cast(b.结束日期+' '+b.结束时间 as datetime))
)
begin
  print '有重复请假区间.'
end
else
begin
  print '无重复请假区间.'
end


-- 执行结果
/*
有重复请假区间.
*/

------解决方案--------------------
这个么,还是介绍你本书吧,《SQL解惑》。
找到其中的谜题3:麻醉师谜题,关于重叠的时间的计算问题,里面提供了有4-5种解法。相信你看懂了那个,这个就是小菜一碟了。
还有,不是太明白为什么你要把日期和时间分开存放呢?你看1楼还得费劲把它整回去,