日期:2014-05-18  浏览次数:20408 次

[馨郁星愿]问个问题:请看
比如我有个表   HotelPrice,里面有几个字段:
客房编号     开始日期     截止日期         价格
1000             2007-9-1     2007-9-30       500
1000             2007-10-1   2007-10-30     800

这样同属于一个房间,如果客人进行时间查询的时候,查询的日期为:
从   2007-9-29   到2007-10-3   日   怎么把这价格列出来??
就是怎么突破这个跨月查询?

------解决方案--------------------
数据只有月份的数据,如何查日的数据,难道将价格平均再乘以天数么
------解决方案--------------------
[馨郁星愿]--这个名字好.
create table tb (客房编号 int,开始日期 datetime,截止日期 datetime,价格 int)
insert into tb values(1000, '2007-9-1 ' , '2007-9-30 ' , 500)
insert into tb values(1000, '2007-10-1 ', '2007-10-30 ', 800)
go
select top 1000 id = identity(int,0,1) into tmp from syscolumns,sysobjects

select * from
(
select 客房编号,价格,dateadd(day,b.id,a.开始日期) 日期 from tb a, tmp b
where dateadd(day,b.id,a.开始日期) <= a.截止日期
) t
where 日期 > = '2007-9-29 ' and 日期 <= '2007-10-3 '
drop table tb,tmp

/*

客房编号 价格 日期
----------- ----------- -----------------------
1000 500 2007-09-29 00:00:00.000
1000 500 2007-09-30 00:00:00.000
1000 800 2007-10-01 00:00:00.000
1000 800 2007-10-02 00:00:00.000
1000 800 2007-10-03 00:00:00.000
(所影响的行数为 5 行)
*/