2009-11-03 38 views
0

使用SQL Server 2005如何重复这两个日期之间的值?

我想这两个日期

之间产生的表值表1

ID Date  Intime Outtime 

01 12-02-2009 10:00:00 17:00:00 
02 13-02-2009 08:00:00 16:00:00 
03 14-02-2009 09:00:00 21:00:00 
04 15-02-2009 

假设我要产生两个日期之间的上述表中的值。

例如,

给定日期:开始日期 - 12-02-2009结束日期 - 2009年12月3日

预计输出,

ID Date  Intime Outtime 

01 12-02-2009 10:00:00 17:00:00 
02 13-02-2009 08:00:00 16:00:00 
03 14-02-2009 09:00:00 21:00:00 
04 15-02-2009 
05 16-02-2009 10:00:00 17:00:00 
06 17-02-2009 08:00:00 16:00:00 
07 18-02-2009 09:00:00 21:00:00 
08 19-02-2009 
09 20-02-2009 10:00:00 17:00:00 
…, 

所以从表1,我们有4行,所以4行将重复到给定的结束日期,但id和日期应该增加,id和日期不应该重复。

如何为这种情况制作SQL查询?

需要查询帮助。

回答

2

试试这个太...

declare @startdate datetime 
    declare @enddate datetime 

    set @startdate = '12-02-2009' 
    set @enddate = '12-05-2009' 

    ;with num_cte as 
    (
      select top(datediff(day,@startdate,@enddate)) ROW_NUMBER() OVER (ORDER BY c.column_id) AS rn 
      from sys.columns c 
    ) 
    , generate_date_cte as 
    ( 
      select 1 as Id,@startdate as newdate 
      union all 
      select rn+1 as Id, newdate 
      from num_cte 
      cross apply(select DATEADD(day,rn,@startdate) AS newdate) x 
    ) 
    select * from generate_date_cte 
0

试试这个

declare @startdate datetime 
declare @enddate datetime 

set @startdate = '12-02-2009' 
set @enddate = '12-05-2009' 

;with generateCalender_cte as 
(
select 
1 as Id 
,@startdate DateValue 
union all 
select 
c.Id + 1    
    ,DateValue + 1 
from generateCalender_cte c 
where DateValue + 1 <= @enddate 
) 

select * from generateCalender_cte 
0

另一种解决方案

declare @startdate datetime 
    declare @enddate datetime 

    set @startdate = '12-02-2009' 
    set @enddate = '12-05-2009' 

    ; with generateCalender_cte as 
    (
      select 
      1 as Id 
      ,@startdate as newdate 
      union all 
      select 
      c.Id + 1 
      ,DATEADD(day,1,c.newdate) 
      from generateCalender_cte c 
      where c.newdate <@enddate 
    ) 
    select * from generateCalender_cte 
相关问题