startTime            endTime
2009-01-03 06:00     2009-02-02  18:00
2009-02-15 21:00     2009-02-20   07:00
2009-02-21 07:00     2009-03-15  09:00现在我想给出两个条件 开始日期  与结束日期段(注意日期段是不包括时间部分的,例如:2009-01-14)想查出如下实例:
当我输入开始日期:2009-01-04  与结束日期2009-02-16 返回是查询不出结果的(因为 2009-02-03 到  2009-02-14 是没有的)
当我输入开始日期:2009-01-03  与结束日期2009-02-01  返回一条记录 这一条: 2009-01-02 06:00     2009-02-02  18:00
当我输入开始日期:2009-02-16  与结束日期2009-03-01  返回两条记录   2009-02-15 21:00     2009-02-20   07:00
                                                                  2009-02-21 07:00     2009-03-15  09:00
当我输入开始日期:2009-02-16  与结束日期2009-03-17  返回是查询不出结果的(即结束日期超过了阶限,不给出返回结果)
当我输入开始日期:2009-01-01  与结束日期2009-03-17  返回是查询不出结果的(即开始日期超过了阶限,不给出返回结果)
不清楚大家看懂我的需求吗,分不是问题,这是在做酒店项目中常用到的SQL查询。因为有些房型的单天价格是不连续的,他们是一段时间有价,一段时间没价根据查询条件,当我输入的日期是在他们连续时间段有房价的话,就结出有房价的记录只要有一个时间超出了阶限就查询不出结果...

解决方案 »

  1.   


    select * from 房价表
    where
    datediff(day,startTime,输入开始日期)>=0 and datediff(day,输入结束日期,endtime)>=0
      

  2.   

    表 
    startTime            endTime 
    2009-01-03 06:00    2009-02-02  18:00 
    2009-02-15 21:00    2009-02-20  07:00 
    2009-02-21 07:00    2009-03-15  09:00 当我输入开始日期:2009-01-04  与结束日期2009-02-16 返回是查询不出结果的(因为 2009-02-03 到  2009-02-14 是没有的) 
    第一条就满足,为什么没有结果?
      

  3.   


    表 
    startTime            endTime 
    2009-01-03 06:00    2009-02-02  18:00 
    2009-02-15 21:00    2009-02-20  07:00 
    2009-02-21 07:00    2009-03-15  09:00 当我输入开始日期:2009-01-04  与结束日期2009-02-16 返回是查询不出结果的(因为 2009-02-03 到  2009-02-14 是没有的) 
    (因为 2009-02-03 到  2009-02-14 是没有的)我在线请教高手 
      

  4.   

    create table tb(id int,startTime datetime,endTime datetime) 
    insert into tb values(1,'2009-01-03 06:00' ,   '2009-02-02  18:00') 
    insert into tb values(2,'2009-02-15 21:00' ,   '2009-02-20  07:00') 
    insert into tb values(3,'2009-02-21 07:00' ,   '2009-03-15  09:00')
    go--临时表
    select top 8000 identity(int,0,1) as id into # from syscolumns a,syscolumns bdeclare @dt1 as datetime
    declare @dt2 as datetimeset @dt1 = '2009-01-04'
    set @dt2 = '2009-02-16'
    select * from tb where id in
    (select distinct m.id from tb m , # n where convert(varchar(10),dateadd(day , n.id , m.startTime),120) <= convert(varchar(10),m.endTime,120) and convert(varchar(10),dateadd(day , n.id , m.startTime),120) between @dt1 and @dt2)
    /*
    id          startTime                                              endTime                                                
    ----------- ------------------------------------------------------ ------------------------------------------------------ 
    1           2009-01-03 06:00:00.000                                2009-02-02 18:00:00.000
    2           2009-02-15 21:00:00.000                                2009-02-20 07:00:00.000(所影响的行数为 2 行)
    */set @dt1 = '2009-01-03'
    set @dt2 = '2009-02-01'
    select * from tb where id in
    (select distinct m.id from tb m , # n where convert(varchar(10),dateadd(day , n.id , m.startTime),120) <= convert(varchar(10),m.endTime,120) and convert(varchar(10),dateadd(day , n.id , m.startTime),120) between @dt1 and @dt2)
    /*
    id          startTime                                              endTime                                                
    ----------- ------------------------------------------------------ ------------------------------------------------------ 
    1           2009-01-03 06:00:00.000                                2009-02-02 18:00:00.000(所影响的行数为 1 行)*/drop table tb , #
      

  5.   

    不是我想要的实例结果,set @dt1 = '2009-01-04'
    set @dt2 = '2009-02-16'这个条件时,我是想要查询不出结果的,你这里是给出了结果,这是不对的
    当我输入开始日期:2009-01-04  与结束日期2009-02-16 返回是查询不出结果的(因为 2009-02-03 到  2009-02-14 是没有的) 
    (因为 2009-02-03 到  2009-02-14 是没有的)