2012-09-12 53 views
5

thể trùng lặp:
SQL Server 2008 Generate a Series of date timesLooping trong câu lệnh SELECT trong ms SQLServer

tôi phải vòng qua một STARTDATE và ENDDATE

Các câu lệnh SELECT nên sản xuất cho kết quả như ..

Kết quả mong đợi:

------------ 
Date 
------------ 
09/01/2012 -> startDate 
09/02/2012 
09/03/2012 
. 
. 
. 
. 
09/30/2012 -> endDate 

tôi đã cố gắng

declare @startDate datetime , @endDate endDate 
set @startDate='09/01/2012' 
set @endDate='09/30/2012' 

while DATEDIFF(@startDate,@endDate)!=-1 
begin 
select @startDate as Date 
set @startDate = DATEADD(day,2,@startDate) 
end 

Nhưng nó không làm việc ra ..

nó tạo ra 30 kết quả đầu ra ..

tôi muốn ngày trong một đầu ra duy nhất như trong kết quả mong muốn. .

nơi tôi đang đi sai ở đây guys?

Trả lời

10

Điều đó sẽ cung cấp cho bạn một kết quả cho mỗi lần lặp vòng lặp như bạn select mỗi lần lặp lại.

Nếu bạn muốn có một resultset đơn chèn vào một bảng temp/biến mỗi lần lặp sau đó chọn từ nó hoặc

;with T(day) as 
(
    select @startDate as day 
     union all 
    select day + 1 
     from T 
     where day < @endDate 
) 
select day as [Date] from T 
+0

thank you very much .. – Dreamer

0

Bạn có thể tạo một bảng tạm thời cho các giá trị và chọn từ mà cuối cùng, sau khi lặp lại.

declare @temp table (TheDate date) 

declare @startDate datetime , @endDate datetime 
set @startDate='09/01/2012' 
set @endDate='09/30/2012' 

while DATEDIFF(day, @startDate, @endDate)!=-1 
begin 
insert into @temp (thedate) values (@startDate) 
set @startDate = DATEADD(day,2,@startDate) 
end 
select * from @temp 

chỉnh sửa: Cte Alex gợi ý là cách làm sạch hơn và nhiều cách khác để thực hiện điều đó mà không cần sử dụng vòng lặp hoặc con trỏ.

2

Nếu bạn muốn sử dụng một vòng lặp WHILE:

declare @startDate datetime , @endDate datetime 
set @startDate='09/01/2012' 
set @endDate='09/30/2012' 

create table #temp (startDate datetime) 

while @startDate <= @endDate 
    begin 
     insert into #temp 
     select @startDate as Date 
     set @startDate = DATEADD(day,1,@startDate) 
    end 

select * 
from #temp 

drop table #temp 

thấy SQL Fiddle with Demo

+0

cảm ơn và sqlfiddle trong đẹp .. – Dreamer

Các vấn đề liên quan