declare @bedate datetime,@edate datetime
declare @year int,@month int
declare @years varchar(50),@months varchar(50)
set @bedate='2004-12-01'
set @edate ='2005-03-01' select @year=year(@bedate),@month=month(@bedate)
set @years =rtrim(@year)
set @months=rtrim(@month)while datediff(mm,@bedate,@edate)>0
begin
    set @bedate=dateadd(mm,1,@bedate)
    if year(@bedate)<>@year
    begin
        set @year =year(@bedate)
        set @years=@years+','+rtrim(@year)
    end
    set @month =month(@bedate)
    set @months=@months+','+rtrim(@month)
endselect @years,@months

解决方案 »

  1.   

    declare @bedate datetime,@edate datetimeset @bedate='2004-12-01'
    set @edate='2005-03-01' declare @year table(a int)
    declare @month table(a int)
    declare @i int,@n int,@bemonth int,@beyear int,@mm int
    set @mm=0
    set @i=datediff(m,@bedate,@edate)
    set @n=datediff(yy,@bedate,@edate)
    select @bemonth=month(@bedate),@beyear=year(@bedate)
    insert @year select @beyear
    insert @month select @bemonth
    while(@i>0)
    begin
         set @mm=@bemonth+1
         if @mm>12
          begin
            insert @month select 1
            set @bemonth=1
          end
         else
           begin
            set @bemonth=@bemonth+1
            insert @month select @bemonth
           end
         set @i=@i-1
    endwhile(@n>0)
    begin
        insert into @year select @beyear+1
        set @beyear=@beyear+1
        set @n=@n-1
    endselect * from @year
    select * from @month
      

  2.   

    declare @bedate datetime
    set @bedate ='2004-12-01'
    declare @edate datetime
    set @edate='2005-03-01' 
    declare @i int
    set @i = datediff(yy,@bedate,@edate) + 1set rowcount @i 
    select rowid = identity(int,0,1) into #tmp from sysobjects a ,sysobjects bset @i = datediff(mm,@bedate,@edate) + 1
    set rowcount @i
    select rowid = identity(int,0,1) into #tmp1 from sysobjects a ,sysobjects b
    declare @line1 varchar(1000)
    set @line1  = ''
    select @line1 = @line1+','+ convert(varchar(4),datepart(yy,@bedate)+rowid) from #tmp
    select @line1 = right(@line1,len(@line1)-1)
    declare @line2 varchar(1000)
    set @line2  = ''
    select @line2 = @line2+','+ convert(varchar(2),datepart(mm,dateadd(mm,rowid,@bedate))) from #tmp1
    select @line2 = right(@line2,len(@line2)-1)
    select '年份',@line1 union 
    select '月份:',@line2
    drop table #tmp1
    drop table #tmp
    /*
                                                                                                                                                                                                                                                                           
    ----- -----------------
    年份    2004,2005
    月份:   12,1,2,3
    */