2か月間の月の開始日と終了日を返すことになっている次の関数がありますが、問題は、今月が28日であるため、関数が28日ベースで次のすべての月を計算して返すことです。次の間違った値。
StartDate EndDate
-----------------------
2013-02-01 2013-02-28
2013-03-01 2013-03-28
2013-04-01 2013-04-28
declare @sDate datetime,
@eDate datetime;
select @sDate = '2013-02-25',
@eDate = '2013-04-25';
;with months as
(
select DATEADD(mm,DATEDIFF(mm,0,@sDate),0) StartDate,
DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@sDate)+1,0)) EndDate
union all
select dateadd(mm, 1, StartDate),
dateadd(mm, 1, EndDate)
from months
where dateadd(mm, 1, StartDate)<= @eDate
)
select * from months
これを変更して正しい日付を返すにはどうすればよいですか?