表
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查询。因为有些房型的单天价格是不连续的,他们是一段时间有价,一段时间没价根据查询条件,当我输入的日期是在他们连续时间段有房价的话,就结出有房价的记录只要有一个时间超出了阶限就查询不出结果...
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查询。因为有些房型的单天价格是不连续的,他们是一段时间有价,一段时间没价根据查询条件,当我输入的日期是在他们连续时间段有房价的话,就结出有房价的记录只要有一个时间超出了阶限就查询不出结果...
select * from 房价表
where
datediff(day,startTime,输入开始日期)>=0 and datediff(day,输入结束日期,endtime)>=0
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 是没有的)
第一条就满足,为什么没有结果?
表
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 是没有的)我在线请教高手
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 , #
set @dt2 = '2009-02-16'这个条件时,我是想要查询不出结果的,你这里是给出了结果,这是不对的
当我输入开始日期:2009-01-04 与结束日期2009-02-16 返回是查询不出结果的(因为 2009-02-03 到 2009-02-14 是没有的)
(因为 2009-02-03 到 2009-02-14 是没有的)