提供2011年,再提供月分11月
出来数据是
 周数       日期
第一周 2011-11-01——2011-11-06
第二周 2011-11-07——2011-11-13
第三周 2011-11-14——2011-11-20
第四周 2011-11-21——2011-11-27
第五周 2011-11-28——2011-11-30
高手们。帮忙给想想。。要不给个例子也成。谢谢了

解决方案 »

  1.   

    declare @year varchar(4),@month varchar(2)
    set @year='2011';
    set @month='11';
    with cte as(
    select dense_rank() over(order by datepart(week,DATEADD(DAY,number,@year+@month+'01'))) as week
    ,convert(char(10),DATEADD(DAY,number,@year+@month+'01'),120)  as time
    from master.dbo.spt_values 
    where type='P' 
    and DATEADD(DAY,number,@year+@month+'01') between @year+@month+'01' and dateadd(day,-1,dateadd(month,1,@year+@month+'01'))
    )
    select '第'+convert(varchar(1),week)+'周',MIN(time)+'---'+MAX(time) from cte as a group by week
    ---------------------------------
    周数    日期
    ----- -----------------------
    第1周   2011-11-01---2011-11-05
    第2周   2011-11-06---2011-11-12
    第3周   2011-11-13---2011-11-19
    第4周   2011-11-20---2011-11-26
    第5周   2011-11-27---2011-11-30
      

  2.   

    不好意思,我是按照周日到周六为一周,下面代码应该是了declare @year varchar(4),@month varchar(2)
    set @year='2011';
    set @month='11';
    with cte as(
    select dense_rank() over(order by datepart(week,dateadd(day,-1,DATEADD(DAY,number,@year+@month+'01')))) as week
    ,convert(char(10),DATEADD(DAY,number,@year+@month+'01'),120)  as time
    from master.dbo.spt_values 
    where type='P' 
    and DATEADD(DAY,number,@year+@month+'01') between @year+@month+'01' and dateadd(day,-1,dateadd(month,1,@year+@month+'01'))
    )
    select '第'+convert(varchar(1),week)+'周' as '周数',MIN(time)+'---'+MAX(time) as '日期' from cte as a group by week
    -------------------------------------
    周数    日期
    ----- -----------------------
    第1周   2011-11-01---2011-11-06
    第2周   2011-11-07---2011-11-13
    第3周   2011-11-14---2011-11-20
    第4周   2011-11-21---2011-11-27
    第5周   2011-11-28---2011-11-30
      

  3.   

    好了,已经修改了,加了个判断
    declare @year varchar(4),@month varchar(2)
    set @year='2011';
    set @month='01';
    with cte as (
    select dense_rank() over(order by case when DATEADD(DAY,number,@year+@month+'01')=@year+'01'+'01' 
    then datepart(week,@year+'01'+'01') else datepart(week,dateadd(day,-1,DATEADD(DAY,number,@year+@month+'01'))) end) as week
    ,convert(char(10),DATEADD(DAY,number,@year+@month+'01'),120)  as time
    from master.dbo.spt_values 
    where type='P' 
    and DATEADD(DAY,number,@year+@month+'01') between @year+@month+'01' and dateadd(day,-1,dateadd(month,1,@year+@month+'01'))
    )
    select '第'+convert(varchar(1),week)+'周' as '周数',MIN(time)+'---'+MAX(time) as '日期' from cte as a group by week
    ------------------------------------
    周数    日期
    ----- -----------------------
    第1周   2011-01-01---2011-01-02
    第2周   2011-01-03---2011-01-09
    第3周   2011-01-10---2011-01-16
    第4周   2011-01-17---2011-01-23
    第5周   2011-01-24---2011-01-30
    第6周   2011-01-31---2011-01-31