假設2個時間段
【a,b],[c,d]
a,b,c,d均為datetime類型,不為空?

解决方案 »

  1.   


      c<b and d>a 時 就會重疊的
      

  2.   

    需要使用临时表生成从a到B,从C到D,然后判断是否有重复的.
      

  3.   

    declare @a as datetime
    declare @b as datetime
    declare @c as datetime
    declare @d as datetime
    set @a = '2009-01-01'
    set @b = '2009-01-05'set @c = '2009-01-03'
    set @d = '2009-01-08'--临时表
    select top 8000 identity(int,0,1) as id into # from syscolumns a,syscolumns bselect dt from
    (
      select dateadd(day , n.id , @a) dt from # n where dateadd(day , n.id , @a) <= @b
      union all
      select dateadd(day , n.id , @c) dt from # n where dateadd(day , n.id , @c) <= @d
    ) t
    group by dt having count(*) > 1
    order by dtdrop table #
    /*
    dt                                                     
    ------------------------------------------------------ 
    2009-01-03 00:00:00.000
    2009-01-04 00:00:00.000
    2009-01-05 00:00:00.000(所影响的行数为 3 行)*/