我必须遍历startDate和endDate
SELECT语句应该将结果生成为..
预期产出:
------------
Date
------------
09/01/2012 -> startDate
09/02/2012
09/03/2012
.
.
.
.
09/30/2012 -> endDate
我试过
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
但它没有成功......
它产生30个输出..
我希望单个输出中的日期与预期输出中的日期相同。
我在哪里错了?
答案 0 :(得分:10)
这将为每次循环迭代提供结果集,每次迭代select
。
如果您希望每次迭代将单个结果集插入到临时表/变量中,请从中选择或
;with T(day) as
(
select @startDate as day
union all
select day + 1
from T
where day < @endDate
)
select day as [Date] from T
答案 1 :(得分:2)
如果您想使用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
答案 2 :(得分:0)
您可以为值创建临时表,并在迭代后从最后选择。
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
编辑:亚历克斯提出的建议是一种更清洁的方式,更多的是一种sql方式,而不使用循环或游标。