declare @sdate1 datetime
declare @edate1 datetime
set @sdate1 = '2008-02-03'
set @edate1 = '2008-02-13'
declare @sdate2 datetime
declare @edate2 datetime
set @sdate2 = '2008-02-01'
set @edate2 = '2008-02-07'select m.dt from
(
select 
    dateadd(dd,num,@sdate1) dt
from 
    (select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) a
where
    dateadd(dd,num,@sdate1)<=@edate1
) m where dt not in
(
select 
    dateadd(dd,num,@sdate2) dt
from 
    (select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) a
where
    dateadd(dd,num,@sdate2)<=@edate2
) /*
dt                                                     
------------------------------------------------------ 
2008-02-08 00:00:00.000
2008-02-09 00:00:00.000
2008-02-10 00:00:00.000
2008-02-11 00:00:00.000
2008-02-12 00:00:00.000
2008-02-13 00:00:00.000(所影响的行数为 6 行)
*/

解决方案 »

  1.   

    select 日期 from tb where 日期 not between '2008-02-01' and '2008-02-07'
      

  2.   

    select * from tb t
    where 房号   not in (select 房号 from tb  where  日期 between '2008-02-01' and '2008-02-07')
          and  日期 between '2008-02-03' and '2008-02-13'
    这样?
      

  3.   

    where endtime>@begin
    and starttime<@end
      

  4.   

    可以考虑使用DATEDIFF来做...DateDiff 函数
    返回两个日期之间的时间间隔。 DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])DateDiff 函数的语法有以下参数:参数
    interval必选项。String expression 表示用于计算 date1 和 date2 之间的时间间隔。date1, date2必选项。日期表达式。用于计算的两个日期。Firstdayofweek可选项。指定星期中第一天的常数。如果没有指定,则默认为星期日。Firstweekofyear可选项。指定一年中第一周的常数。如果没有指定,则默认为 1 月 1 日所在的星期。