+ -
当前位置:首页 → 问答吧 → 一个月有多少个周

一个月有多少个周

时间:2011-12-09

来源:互联网

提供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
高手们。帮忙给想想。。要不给个例子也成。谢谢了

作者: wq18734453997   发布时间: 2011-12-09

顶一下。。别沉了!!

作者: wq18734453997   发布时间: 2011-12-09

不能让沉了 !!自己再顶个

作者: wq18734453997   发布时间: 2011-12-09

回去了再考虑一下。

作者: fredrickhu   发布时间: 2011-12-09

SQL code
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

作者: chtzhking   发布时间: 2011-12-09

不好意思,我是按照周日到周六为一周,下面代码应该是了
SQL code

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

作者: chtzhking   发布时间: 2011-12-09

建议输入月份的时候1月输入‘01’

作者: chtzhking   发布时间: 2011-12-09

谢谢了!!来我试!好了。立马上分。

作者: wq18734453997   发布时间: 2011-12-09

如果输入2011和01怎么出现了。7周!!高手。你再给看看。

作者: wq18734453997   发布时间: 2011-12-09

好了,已经修改了,加了个判断SQL code

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

作者: chtzhking   发布时间: 2011-12-09