from_date                  end_date
-----------------------   -------------------
2007-05-01 00:00:00 2007-06-06 00:00:00
2007-10-01 00:00:00 2007-10-10 00:00:00
表的结构如上,
现在我想写一存储过程,两个参数,一个开始时间,一个结束时间,也就是我想用这个存储过程判断一个时间段是否在这个表里的时间段内,如果在返回1,如果不在返回0,谢谢大家了,

解决方案 »

  1.   

    declare @Date datetime
    set @Date = getdate()
    if exists (select 1 from TAB where from_date =< @Date and end_date >= @Date)
    return(1)
    else
    return(0)
      

  2.   


    create proc p_test(@dt1 datetime, @dt2 datetime)
    as
    if exists (select 1 from 表名 where (@dt1 between 开始日期 and 结束日期) and (@dt2 between 开始日期 and 结束日期))
    select 1
    else
    select 0
    go
      

  3.   

    create proc test
    @Sdate smalldatetime,
    @Edate smalldatetime
    as
    if exists(select 1 from [Table] where datediff(day,from_date,@Sdate)>=0 and datediff(day,@Edate,end_date)>=0)
        return 1
    else
        return 0
      

  4.   

    create proc p_test(@dt1 datetime, @dt2 datetime,@result int out) as
    begin 
    declare @_date datetime
    declare @a int --返回的值
    _date='2007-10-10 00:00:00'--你所要判断的时间值
    if _date>=@dt1 and _date<=@dt2
        @a=1
    else
        @a=0
    return @a
    end
      

  5.   

    declare @Date1 datetime,@Date2 datetime,@Tmp datetimeset @Date1 = ...
    set @Date2 = ...if @Date1 > @Date2 select @Tmp = @Date1, @Date1 = @Date2, @Date2 = @Tmpif exists (select 1 from TAB where from_date =< @Date1 and end_date >= @Date2)
    return(1)
    else
    return(0)
      

  6.   

    --这不是两个参数?create proc p_test(@dt1 datetime, @dt2 datetime)
    as
    if exists (select 1 from 表名 where (@dt1 between 开始日期 and 结束日期) and (@dt2 between 开始日期 and 结束日期))
    select 1
    else
    select 0
    go
      

  7.   

    create proc pro_aaa @d1 datetime,@d2 datetime,@i int output as
    set @i=0
    select @i=1 where exists(select 0 from 表1 where @d1 between from_date and end_date) and exists(select 0 from 表1 where @d2 between from_date and end_date)
    ---------------------
    declare @ii int
    exec pro_aaa '2007-06-07','2000-07-10',@ii output
    select @ii
      

  8.   

    测试数据
    create table 表1(from_date datetime,end_date datetime)
                                                     insert 表1 select
    '2007-05-01 00:00:00', '2007-06-06 00:00:00' insert 表1 select
    '2007-10-01 00:00:00', '2007-10-10 00:00:00'
      

  9.   

    先建一个自定义函数
    CREATE FUNCTION pp (@dt1 datetime, @dt2 datetime, @dt3 datetime, @dt4 datetime)  
    RETURNS int  AS  
    BEGIN 
    declare @a int
    if (@dt3>=@dt1 and  @dt4<=@dt2 ) 
      set @a= 1
    else
        set @a=0
    return @a
     
    END建表 tt 并插入记录
    create table tt (_date1 datetime,_date2 datetime)
    insert into tt values('2007-05-01','2007-10-01')
    insert into tt values('2007-10-01,'2007-12-01')测试
    select *,dbo.pp(_date1,_date2,'2007-05-02','2007-07-09') as result from tt结果------
                 _date1                        _date2               reslt
             2007-05-01 00:00:00.000 2007-10-01 00:00:00.000 1
             2007-10-01 00:00:00.000 2007-12-01 00:00:00.000 0
      

  10.   

    /*
    如果我给的参数是 '2007-05-06','2007-10-09' 这两个时间的时间段就和表里交叉了,返回1
    如果我给的参数是‘2000-05-05’,‘2000-06-07’这样就返回0
    如果我给的参数是‘2007-06-07’,‘2000-07-10’这样也返回0
    ……
    就是说我现在有个时间段,这个时间段既不能在表内的时间段内,也不能和表内的时间段交叉,怎么半?
    */
    ---------------------------------/*
    这样办:要实现这样的功能,数据表需要一个连续唯一的ID。
    */set nocount on
    --原始数据:@Original 没有连续唯一的列,不能通过这个表查询。
    declare @Original table (Start datetime, Stop datetime)
    insert @Original 
    select '2007-10-01 00:00:00','2007-10-10 00:00:00' union all
    select '2007-05-01 00:00:00','2007-06-06 00:00:00'--测试数据:创建有自增列的测试表,将通过这个表查询。
    declare @Test table (ID int identity(1,1), Start datetime, Stop datetime)
    insert @Test(Start, Stop) select * from @Original order by Start -- order by Start 很关键,一定要!
    set nocount offdeclare @Start datetime, @Stop datetimeselect @Start = '2007-05-06', @Stop = '2007-10-09'
    if exists (select 1 from @Test where Start>=@Start and Stop <=@Stop) print 1
    else if exists (select 1 from @Test a left join @Test b on a.ID = b.ID + 1 where b.Stop>=@Start and a.Start<=@Stop) print 1
    else print 0
    /*
    print 1
    */select @Start = '2000-05-05', @Stop = '2000-06-07'
    if exists (select 1 from @Test where Start>=@Start and Stop <=@Stop) print 1
    else if exists (select 1 from @Test a left join @Test b on a.ID = b.ID + 1 where b.Stop>=@Start and a.Start<=@Stop) print 1
    else print 0
    /*
    print 0
    */select @Start = '2007-06-07', @Stop = '2000-07-10'
    if exists (select 1 from @Test where Start>=@Start and Stop <=@Stop) print 1
    else if exists (select 1 from @Test a left join @Test b on a.ID = b.ID + 1 where b.Stop>=@Start and a.Start<=@Stop) print 1
    else print 0
    /*
    print 0
    */