输入一个时间段 如: 2012-04   ----2012-09  
如何能得到以下的效果呢
 
2012-04
2012-05
2012-06
......
2012-09

解决方案 »

  1.   

    以解决
    SELECT  CONVERT(CHAR(7), DateSpan, 23) AS Mon
    FROM    ( SELECT    STUFF(STUFF(CONVERT(VARCHAR(10), DATEADD(mm, id,
                                                                 '2012-04-01'), 111),
                                    5, 1, '-'), 8, 1, '-') AS DateSpan
              FROM      ( SELECT TOP 50
                                    ( SELECT    COUNT(*)
                                      FROM      sysobjects
                                      WHERE     id <= a.id
                                    ) - 1 AS id
                          FROM      sysobjects a
                        ) aa
              WHERE     DATEADD(mm, id, '2012-04-01') <= '2012-09-01'
            ) A 坐等更好的优化方法
      

  2.   


    declare @Start varchar(10)
    declare @End varchar(10)
    set @Start='2012-04'
    set @End='2012-09'
    select 
        LEFT(@Start,5)+right('00'+ltrim(number),2) as Year_Month
    from 
        master..spt_values
    where 
        number between cast(RIGHT(@Start,2) as int) and cast(RIGHT(@End,2) as int)
        and type='p'
    /*
    Year_Month
    ----------------
    2012-04
    2012-05
    2012-06
    2012-07
    2012-08
    2012-09*/
      

  3.   


    declare @Start varchar(10)
    declare @End varchar(10)
    set @Start='2012-04'
    set @End='2013-09'
    --实现跨年:
    select 
        convert(varchar(7),DATEADD(MM,number,cast(@Start+'-01' as date)),120) as Year_Month
    from 
        master..spt_values
    where 
        number between 0 
        and DATEDIFF(MM,cast(@Start+'-01' as date),cast(@End+'-01' as date))
        and type='p'/*
    Year_Month
    ------------------
    2012-04
    2012-05
    2012-06
    2012-07
    2012-08
    2012-09
    2012-10
    2012-11
    2012-12
    2013-01
    2013-02
    2013-03
    2013-04
    2013-05
    2013-06
    2013-07
    2013-08
    2013-09
    */