请问,给定开始、结束两个日期参数,如何得到下面的结果集
如:开始日期:2010-10-05
结束日期:2011-3-20如何将这两个区间包含的年月插入到指定表T1中,T1表包含nian、yue字段
nian  yue
2010  10
2010  11
2010  12
2011  01
2011  02
2011  03

解决方案 »

  1.   

    create table #T1(nian char(4),yue char(2))
    declare @begindate Date='2010-10-5'
    declare @enddate date='2011-3-20'
    declare @i int=0,@count int=DATEDIFF(month,@begindate,@enddate)while  @i<=@count
    begin
    insert into #T1
    select ltrim(YEAR(@begindate)),right('00'+cast(MONTH(@begindate) as varchar(2)),2)
    set @begindate=DATEADD(month,1,@begindate)
    set @i=@i+1
    end
    select * from #T1
      

  2.   

    顶- -CREATE table #T1 (nian char(4),yue char(2))
    declare @begindate Datetime
    SET @begindate='2010-10-5'
    declare @enddate datetime
    SET @enddate='2011-3-20'
    declare @i int,@count int
    SET @i=0
    SET @count=DATEDIFF(month,@begindate,@enddate)while  @i<=@count
    begin
    insert INTO #T1
    select ltrim(YEAR(@begindate)),right('00'+cast(MONTH(@begindate) as varchar(2)),2)
    set @begindate=DATEADD(month,1,@begindate)
    set @i=@i+1
    end
    select * from #T1 
      

  3.   


    create   function   calcmonth(@dt1   datetime,@dt2   datetime) 
    returns   @re   table(id   int   identity(1,1),yyyy int,MM int) 
    as 
    begin 
    declare   @month1   int
    declare   @year1 int
    declare   @month2   int
    declare   @year2 int
    declare   @count int
    select   @month1=MONTH(@dt1)
    select  @year1=YEAR(@dt1)
    select   @count=datediff(month,@dt1,@dt2)while @count>=0
    begin 
    insert   into   @re(yyyy,MM) values(@year1,@month1)
    set @count=@count-1
    set @month1=@month1+1
    if @month1>12
    begin
    set @month1=1
    set @year1=@year1+1
    end
    end
    return 
    end 
    GO
    --调用方法
    Select * from dbo.calcmonth('2010-5-1','2011-3-20')
      

  4.   


    DECLARE @start DATETIME='2010-10-05',
    @end DATETIME='2011-3-20'
    SELECT YEAR(DATEADD(MONTH,number,@start)) AS [nian],
    CASE LEN(MONTH(DATEADD(MONTH,number,@start))) WHEN 1 
    THEN LTRIM(0)+LTRIM(MONTH(DATEADD(MONTH,number,@start))) 
    ELSE LTRIM(MONTH(DATEADD(MONTH,number,@start))) 
    END AS [yue]
    FROM master..spt_values
    WHERE [type]='P'
    AND DATEADD(MONTH,number,@start)<=@end--------------------
    nian yue
    2010 10
    2010 11
    2010 12
    2011 01
    2011 02
    2011 03