2012-09-12 13 views
5

Powiel możliwe:
SQL Server 2008 Generate a Series of date timesPętla w SELECT w ms sqlserver

muszę Loop przez startDate i endDate

Instrukcja SELECT powinna dawać wynik jako ..

Oczekiwany wynik:

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

próbowałem

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 

ale jej nie pracuje ..

generuje 30 wyjść ..

chcę daty w jednym wyjściu, jak w oczekiwanej produkcji.

gdzie ja się tu mylę?

Odpowiedz

10

To da ci zestaw wyników dla każdej iteracji pętli, jak select na iterację.

Jeśli chcesz pojedynczy resultset wstawić do tabeli temp/zmienna jednej iteracji następnie wybierz z niej lub

;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

dziękuję bardzo .. – Dreamer

0

Można by utworzyć tabelę temp na wartości, a następnie wybrać, że w końcu, po iteracja.

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 

edit: CTE Alex sugerują imo jest znacznie czystszy sposób, aby to zrobić, a raczej sposób sql to zrobić bez użycia pętli lub kursorów.

2

Jeśli chcesz użyć WHILE pętlę:

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 

zobaczyć SQL Fiddle with Demo

+0

podziękowania i sqlfiddle w ładne .. – Dreamer