在网上开到几种生成连续日期的方法,放到这里总结一下,便于自己和大家以后参考
第一种,利用master..spt_values来生成连续日期
declare @date datetime set @date='2009-02-05' select [day]=convert(varchar,DATEADD(mm,DATEDIFF(mm,0,@date),0)+number,121) from master..spt_values where type='p' and number< datediff(dd,@date,dateadd(mm,1,@date))
--输出2008年至今以来的月份列表: create table Mon ( ID int identity(1,1), Mon varchar(6) ) GO DECLARE @BeginMonth varchar(6), @EndMonth varchar(6) SELECT @BeginMonth='200801', @EndMonth='200906' INSERT Mon(Mon) SELECT CONVERT(VARCHAR(6),DATEADD(month,number,@BeginMonth+'01'),112) FROM master..spt_values WHERE type='P' and DATEADD(month,number,@BeginMonth+'01')<=@EndMonth+'01' SELECT * FROM Mon DROP TABLE Mon
ps:这是利用表master..sp_values查询连续数字的,但是范围要在2048以内,不包括2048
select number from master..spt_values where type='P' and number between 1 and 1000
第二种,直接生成连续日期,表temptab(date) 只是临时表
Declare @mindate datetime Declare @maxdate datetime set @mindate = '2010-01-01' set @maxdate = '2010-02-01' ;with temptab(date) as ( select @mindate union all select dateadd(d,1,temptab.date) as date from temptab where dateadd(d,1,temptab.date)<=@maxdate ) select * from temptab