försök:
DECLARE @YourTable table (YourDate datetime, value int)
insert into @YourTable VALUES ('2011-7-12',5)
;WITH AllNumbers AS
(
SELECT 0 AS Number
UNION ALL
SELECT Number+1
FROM AllNumbers
WHERE Number<4
)
SELECT
dateadd(month,number,DATEADD(month,DATEDIFF(month,0,YourDate),0))
FROM @YourTable y
INNER JOIN AllNumbers a ON 1=1
utdata:
-----------------------
2011-07-01 00:00:00.000
2011-08-01 00:00:00.000
2011-09-01 00:00:00.000
2011-10-01 00:00:00.000
2011-11-01 00:00:00.000
(5 row(s) affected)
det fungerar med flera rader i tabellen, se här:
DECLARE @YourTable table (YourDate datetime, ValueOf int)
insert into @YourTable VALUES ('2011-7-12',5)
insert into @YourTable VALUES ('2012-4-24',6)
;WITH AllNumbers AS
(
SELECT 0 AS Number
UNION ALL
SELECT Number+1
FROM AllNumbers
WHERE Number<4
)
SELECT
y.ValueOf
,dateadd(month,number,DATEADD(month,DATEDIFF(month,0,y.YourDate),0))
FROM @YourTable y
INNER JOIN AllNumbers a ON 1=1
ORDER BY 1,2
UTGÅNG:
ValueOf
----------- -----------------------
5 2011-07-01 00:00:00.000
5 2011-08-01 00:00:00.000
5 2011-09-01 00:00:00.000
5 2011-10-01 00:00:00.000
5 2011-11-01 00:00:00.000
6 2012-04-01 00:00:00.000
6 2012-05-01 00:00:00.000
6 2012-06-01 00:00:00.000
6 2012-07-01 00:00:00.000
6 2012-08-01 00:00:00.000
(10 row(s) affected)
Dessutom har jag inte SQL Server 2008 tillgängligt, så jag använde datetime, om du har 2008 kan du använda DATE
datatyp och du behöver inte lägga ned datetime, så använd den här raden:
dateadd(month,number,y.YourDate)