DECLARE @MONTH char(6) set @MONTH='201507'
现给定一个日期,比如201507,查询出年初到当前日期之前有多少个月份
显示结果需如下
201501
201502
201503
201504
201505
201506该如何实现?

解决方案 »

  1.   

    我先来,做的有点繁琐,有没有简单点的方法DECLARE @MONTH char(20) set @MONTH='201512'
    SELECT LEFT(@MONTH,4)+'01' 
    union 
    SELECT LEFT(@MONTH,4)+'02' WHERE LEFT(@MONTH,4)+'02'<@MONTH
    union
    SELECT LEFT(@MONTH,4)+'03' WHERE LEFT(@MONTH,4)+'03'<@MONTH
    union 
    SELECT LEFT(@MONTH,4)+'04' WHERE LEFT(@MONTH,4)+'04'<@MONTH
    union
    SELECT LEFT(@MONTH,4)+'05' WHERE LEFT(@MONTH,4)+'05'<@MONTH
    union 
    SELECT LEFT(@MONTH,4)+'06' WHERE LEFT(@MONTH,4)+'06'<@MONTH
    union
    SELECT LEFT(@MONTH,4)+'07' WHERE LEFT(@MONTH,4)+'07'<@MONTH
    union 
    SELECT LEFT(@MONTH,4)+'08' WHERE LEFT(@MONTH,4)+'08'<@MONTH
    union
    SELECT LEFT(@MONTH,4)+'09' WHERE LEFT(@MONTH,4)+'09'<@MONTH
    union 
    SELECT LEFT(@MONTH,4)+'10' WHERE LEFT(@MONTH,4)+'10'<@MONTH
    union
    SELECT LEFT(@MONTH,4)+'11' WHERE LEFT(@MONTH,4)+'11'<@MONTH
      

  2.   

    DECLARE @MONTH char(6) set @MONTH='201507';with Dt
    as
    (
    select cast(left(@MONTH,4)+'0101' as date) as MM
    union all
    select dateadd(mm,1,MM) from Dt where convert(varchar(6),MM,112)<@MONTH
    )
    select convert(varchar(6),MM,112) as MM from Dt/*MM
    201501
    201502
    201503
    201504
    201505
    201506
    201507
    */