日期:2014-05-17  浏览次数:20537 次

请问下。。sql怎么判断一个个月的第一周,第二周,第三周
请问下。。sql怎么判断一个个月的第一周,第二周,第三周???
------最佳解决方案--------------------
create function fn_getwk(
@year int,--输入显示的年份
@month int, --输入显示的月份
@type bit=0 --指定每周的第一天,默认为星期日(中国习惯),如果参数为1就是星期一为每周的第一天
) returns @t table(
周数 nvarchar(10),
开始日期 varchar(10),
结束日期 varchar(10)
) as
begin
declare @d datetime
set @d=dateadd(wk,datediff(wk,'1900',cast(ltrim(@year*10000+@month*100+1) as datetime)),'1900')+@type
;with t as
(
select top (datediff(dd,ltrim(@year*10000+@month*100+1),ltrim(@year*10000+(@month+1)*100+1)))
[date]=cast(ltrim(@year*10000+@month*100+1) as datetime)-1
+row_number()over(order by getdate())
from sysobjects 
)
insert @t
select 
case 
when [date] between @d and @d+5 then '第一周'
when [date] between @d+6 and @d+12 then '第二周'
when [date] between @d+13 and @d+19 then '第三周'
when [date] between @d+20 and @d+26 then '第四周'
when [date] between @d+27 and @d+33 then '第五周'
else '第六周'
end AS 周数,
convert(varchar,min([date]),23) 开始日期,
convert(varchar,max([date]),23) 结束日期
from t
group by 
case 
when [date] between @d and @d+5 then '第一周'
when [date] between @d+6 and @d+12 then '第二周'
when [date] between @d+13 and @d+19 then '第三周'
when [date] between @d+20 and @d+26 then '第四周'
when [date] between @d+27 and @d+33 then '第五周'
else '第六周'
end
order by 2
return
end
GO

select * from fn_getwk(2010,5,0)
/*
周数         开始日期       结束日期
---------- ---------- ----------
第一周        2010-05-01 2010-05-01
第二周        2010-05-02 2010-05-08
第三周        2010-05-09 2010-05-15
第四周        2010-05-16 2010-05-22
第五周        2010-05-23 2010-05-29
第六周        2010-05-30 2010-05-31

(6 行受影响)
*/
select * from fn_getwk(2010,5,1)
/*
周数         开始日期       结束日期
---------- ---------- ----------
第一周        2010-05-01 2010-05-02
第二周        2010-05-03 2010-05-09
第三周        2010-05-10 2010-05-16
第四周        2010-05-17 2010-05-23
第五周        2010-05-24 2010-05-30
第六周        2010-05-31 2010-05-31

(6 行受影响)
*/

------其他解决方案--------------------
Use datediff(wk, '2009-05-01', your_date). Obviously you need to supply the current&nbs