我的数据格式如下:ID      姓名       开始时间                   结束时间1       张一     2011-05-24 10:00:00          2011-05-24 10:59:002       王二     2011-05-24 10:00:00          2011-05-24 10:59:003       李三     2011-05-24 10:00:00          2011-05-26 10:59:00   *4       尹四     2011-05-22 10:00:00          2011-05-27 10:00:00   *5       吴五     2011-05-25 10:00:00          2011-05-30 10:00:00   *6       秦六     2011-05-20 10:00:00          2011-05-30 10:00:00   *7       赵七     2011-05-10 10:00:00          2011-05-15 10:00:00要求(取出带星号的数据)1.取出“开始时间”与“结束时间”包含 2011-05-23  到 2011-05-29  之间的数据。比如:第三条记录,“开始时间”与“结束时间” 在  2011-05-23  到 2011-05-29  之间
      第四条记录,虽然“开始时间”不再2011-05-23内,但“结束时间”在2011-05-29 内
      第五条记录同上。
      第六条记录,开始时间 与 结束时间 中 包含2011-05-23  到 2011-05-29 的日期。所以也要取出2.必须是跨天。比如第一条数据,开始时间与结束时间 是同一天,这样的数据不能取。谢谢大家帮忙了~!!!!很急,高分在线等

解决方案 »

  1.   

    select * from tb where datediff(day,开始时间,结束时间)>0
     and 开始时间 between '2011-05-23' and '2011-05-29'
     and 结束时间 between '2011-05-23' and '2011-05-29'
      

  2.   

    select * from tb where datediff(day,开始时间,结束时间)>0
     and (开始时间 between '2011-05-23' and '2011-05-29'
           and 结束时间 between '2011-05-23' and '2011-05-29')
          or
         ('2011-05-23' between 开始时间 and 结束时间
            and '2011-05-29' between 开始时间 and 结束时间
          )
      

  3.   


    --这会对了吧
    select * from tb where datediff(day,开始时间,结束时间)>0
     and ((开始时间 between '2011-05-23' and '2011-05-29'
           and 结束时间 between '2011-05-23' and '2011-05-29')
          or
         ('2011-05-23' between 开始时间 and 结束时间
            and '2011-05-29' between 开始时间 and 结束时间))
      

  4.   

    declare @tb table ([ID] int,[姓名] nvarchar(4),[开始时间] datetime,[结束时间] datetime)
    insert into @tb
    select 1,'张一','2011-05-24 10:00:00','2011-05-24 10:59:00' union all
    select 2,'王二','2011-05-24 10:00:00','2011-05-24 10:59:00' union all
    select 3,'李三','2011-05-24 10:00:00','2011-05-26 10:59:00' union all
    select 4,'尹四','2011-05-22 10:00:00','2011-05-27 10:00:00' union all
    select 5,'吴五','2011-05-25 10:00:00','2011-05-30 10:00:00' union all
    select 6,'秦六','2011-05-20 10:00:00','2011-05-30 10:00:00' union all
    select 7,'赵七','2011-05-10 10:00:00','2011-05-15 10:00:00'
    select *
    from @tb
    where (([开始时间] between '2011-05-23' and '2011-05-29' 
    or    [结束时间] between '2011-05-23' and '2011-05-29')
    or('2011-05-23' between  [开始时间] and  [结束时间] 
    or '2011-05-29' between  [开始时间] and  [结束时间]))
    and datediff(day,[结束时间],[开始时间])!=0
    /*
    ID          姓名   开始时间                    结束时间
    ----------- ---- ----------------------- -----------------------
    3           李三   2011-05-24 10:00:00.000 2011-05-26 10:59:00.000
    4           尹四   2011-05-22 10:00:00.000 2011-05-27 10:00:00.000
    5           ?五   2011-05-25 10:00:00.000 2011-05-30 10:00:00.000
    6           秦六   2011-05-20 10:00:00.000 2011-05-30 10:00:00.000(4 row(s) affected)*/
      

  5.   

    select
       a.*
    from
       tb a
    cross join
       (select
            *
        from
            tb
        where
             datediff(dd,a.开始时间,a.结束时间)>=1
        and
             (a.开始时间  between '2011-05-23' and '2011-05-29'
        or    
             a.结束时间  between '2011-05-23' and '2011-05-29')
        and
             姓名=a.姓名)b
         
      

  6.   

    select
       a.*
    from
       tb a
    cross apply
       (select
            *
        from
            tb
        where
             datediff(dd,a.开始时间,a.结束时间)>=1
        and
             (a.开始时间  between '2011-05-23' and '2011-05-29'
        or    
              a.结束时间  between '2011-05-23' and '2011-05-29')
        and
             姓名=a.姓名)b
      

  7.   


    --最简洁准确的写法
    select * from tb 
    where [结束时间]>='2011-05-23' and [开始时间]<='2011-05-29' and datediff(d,[开始时间],[结束时间])>=1/*
    ID          姓名   开始时间                    结束时间
    ----------- ---- ----------------------- -----------------------
    3           李三   2011-05-24 10:00:00.000 2011-05-26 10:59:00.000
    4           尹四   2011-05-22 10:00:00.000 2011-05-27 10:00:00.000
    5           吴五   2011-05-25 10:00:00.000 2011-05-30 10:00:00.000
    6           秦六   2011-05-20 10:00:00.000 2011-05-30 10:00:00.000(4 行受影响)
    */
    楼主,可以结贴了