試してください:
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
プレ>出力:
<前>-----------------------2011-07-01 00:00:00.0002011-08-01 00:00:00.0002011-09 -01 00:00:00.0002011-10-01 00:00:00.0002011-11-01 00:00:00.000 (影響を受ける 5 行)
プレ>テーブル内の複数の行で機能します。こちらを参照してください:
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
プレ>出力:
ValueOf ----------------------- -----------------------5 2011-07-01 00:00 :00.0005 2011-08-01 00:00:00.0005 2011-09-01 00:00:00.0005 2011-10-01 00:00:00.0005 2011-11-01 00:00:00.0006 2012-04-01 00:00 :00.0006 2012-05-01 00:00:00.0006 2012-06-01 00:00:00.0006 2012-07-01 00:00:00.0006 2012-08-01 00:00:00.000(10 行が影響を受ける) コード> プレ>
また、私は SQL Server 2008 を利用できないので、datetime を使用しました。2008 を使用している場合は、
DATE
を使用できます。 データ型であり、日時をフロアにする必要がないため、次の行を使用してください:dateadd(month,number,y.YourDate)
プレ>