第一种,利用master..spt_values来生成连续日期
这是利用表master..sp_values查询连续数字的,但是范围要在2048以内,不包括2048
第二种,直接生成连续日期,表temptab(date) 只是临时表
出处
http://www.cnblogs.com/envelope/archive/2010/04/27/1721786.html
- 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))<pre name="code" class="sql">--输出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
- 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