假如有个表workers ,有很多字段,其中两个字段是begindate 和enddate,用来表示某个工人开始工作的日期和结束工作的日期。workername   begindate      enddate
张三          2012-6-1      2012-6-12
李四          2012-6-5      2012-6-20
王五          2012-6-9      2012-6-10================================================假如查询时,提供两个文本框,第一个框输入 2012-6-1 ,第二个框输入2012-6-8后,我实际想要得到的记录是:张三和李四,两条记录的内容。要求是: 只要 在搜索的两个日期间的(包括两个搜索日期)的,或者 begindate和enddate间有一个等于这两个搜索日期间的数据记录存在的话,就显示出来。[b]如何写语句?? 
用程序的方式,能实现。但是,现在想简化点,通过SQL语句的方式能实现.[/b]
假如第一个框的id= d1,第二个框的id=d2===================================================
谢谢!

解决方案 »

  1.   


    --> 测试数据:[test]
    if object_id('[test]') is not null drop table [test]
    create table [test](
    [workername] varchar(4),
    [begindate] date,
    [enddate] date
    )
    go
    insert [test]
    select '张三','2012-6-1','2012-6-12' union all
    select '李四','2012-6-5','2012-6-20' union all
    select '王五','2012-6-9','2012-6-10'
    go
    declare @d1 date
    set @d1='2012-6-1'
    declare @d2 date
    set @d2='2012-6-8'
    select * 
    from test 
    where [begindate] between @d1 and @d2
    or [enddate] between @d1 and  @d2
    or [begindate]<@d1 and @d2>[enddate]--若果需要的是两个区间有交集就绪把这个加上,不需要就去掉/*
    workername begindate enddate
    ------------------------------------
    张三 2012-06-01 2012-06-12
    李四 2012-06-05 2012-06-20
    */
      

  2.   


    --更正一下--> 测试数据:[test]
    if object_id('[test]') is not null drop table [test]
    create table [test](
    [workername] varchar(4),
    [begindate] date,
    [enddate] date
    )
    go
    insert [test]
    select '张三','2012-6-1','2012-6-12' union all
    select '李四','2012-6-5','2012-6-20' union all
    select '王五','2012-6-9','2012-6-10'
    go
    declare @d1 date
    set @d1='2012-6-1'
    declare @d2 date
    set @d2='2012-6-8'
    select * 
    from test 
    where [begindate] between @d1 and @d2
    or [enddate] between @d1 and  @d2
    or ([begindate]<@d1 and @d2>[enddate])--若果需要的是两个区间有交集就绪把这个加上,不需要就去掉/*
    workername begindate enddate
    ------------------------------------
    张三 2012-06-01 2012-06-12
    李四 2012-06-05 2012-06-20
    */
      

  3.   

    select * from test
    where '2012-6-1' between [begindate] and [enddate]
    or '2012-6-8' between [begindate] and [enddate]
      

  4.   

    嗯。between表示两者之间,包含两个端点的值
      

  5.   

    SQL 2000的也行,更何况2005?