declare @CW nvarchar(2)
DECLARE @dt DATETIME,@wk int
set datefirst 1
SET @dt=getdate()
SELECT @wk=DATEPART(weekday,RTRIM(YEAR(@dt))+'-01'+'-01')SELECT @CW=CASE WHEN (CASE @wk WHEN 1 THEN DATEPART(ww,@dt) ELSE DATEPART(ww,@dt)-1 END) =0 THEN 52 ELSE (CASE @wk WHEN 1 THEN DATEPART(ww,@dt) ELSE DATEPART(ww,@dt)-1 END) END
if len(@cw)=1
begin
set @CW='0'+@CW
end
在跨年时,2011年1月1日是52周,1-2日也是52周
关键是如何把年份夜落在2010年的52周呢
因为year(gedate())已经为11年了
这样,如何将拼结代码成 201052xxxxxxx,如何才能判断什么时该年份该减去一个1呢得到10年
但问题是11年也有52周的程序会拼成201152xxxxx的型式谢谢!
DECLARE @dt DATETIME,@wk int
set datefirst 1
SET @dt=getdate()
SELECT @wk=DATEPART(weekday,RTRIM(YEAR(@dt))+'-01'+'-01')SELECT @CW=CASE WHEN (CASE @wk WHEN 1 THEN DATEPART(ww,@dt) ELSE DATEPART(ww,@dt)-1 END) =0 THEN 52 ELSE (CASE @wk WHEN 1 THEN DATEPART(ww,@dt) ELSE DATEPART(ww,@dt)-1 END) END
if len(@cw)=1
begin
set @CW='0'+@CW
end
在跨年时,2011年1月1日是52周,1-2日也是52周
关键是如何把年份夜落在2010年的52周呢
因为year(gedate())已经为11年了
这样,如何将拼结代码成 201052xxxxxxx,如何才能判断什么时该年份该减去一个1呢得到10年
但问题是11年也有52周的程序会拼成201152xxxxx的型式谢谢!
2011-01-01 --> 2011年的第一周的星期六.
2011-01-01 --> 2010年的第五十三周的星期六.不过大多数都认为是:2011年的第一周的星期六.
set @dt='2010'
select number+1 as 周次,
convert(varchar(10),dateadd(d,-datepart(dw,dateadd(wk,number,@dt+'-01-01'))+2,dateadd(wk,number,@dt+'-01-01')),120)as 开始,
convert(varchar(10),dateadd(d,-datepart(dw,dateadd(wk,number,@dt+'-01-01'))+8,dateadd(wk,number,@dt+'-01-01')),120)as 结束
from master..spt_values where type='p' and
year(convert(varchar(10),dateadd(d,-datepart(dw,dateadd(wk,number,@dt+'-01-01'))+2,dateadd(wk,number,@dt+'-01-01')),120))<=@dt
/*
周次 开始 结束
----------- ---------- ----------
1 2009-12-28 2010-01-03
2 2010-01-04 2010-01-10
3 2010-01-11 2010-01-17
4 2010-01-18 2010-01-24
5 2010-01-25 2010-01-31
6 2010-02-01 2010-02-07
7 2010-02-08 2010-02-14
8 2010-02-15 2010-02-21
9 2010-02-22 2010-02-28
10 2010-03-01 2010-03-07
11 2010-03-08 2010-03-14
12 2010-03-15 2010-03-21
13 2010-03-22 2010-03-28
14 2010-03-29 2010-04-04
15 2010-04-05 2010-04-11
16 2010-04-12 2010-04-18
17 2010-04-19 2010-04-25
18 2010-04-26 2010-05-02
19 2010-05-03 2010-05-09
20 2010-05-10 2010-05-16
21 2010-05-17 2010-05-23
22 2010-05-24 2010-05-30
23 2010-05-31 2010-06-06
24 2010-06-07 2010-06-13
25 2010-06-14 2010-06-20
26 2010-06-21 2010-06-27
27 2010-06-28 2010-07-04
28 2010-07-05 2010-07-11
29 2010-07-12 2010-07-18
30 2010-07-19 2010-07-25
31 2010-07-26 2010-08-01
32 2010-08-02 2010-08-08
33 2010-08-09 2010-08-15
34 2010-08-16 2010-08-22
35 2010-08-23 2010-08-29
36 2010-08-30 2010-09-05
37 2010-09-06 2010-09-12
38 2010-09-13 2010-09-19
39 2010-09-20 2010-09-26
40 2010-09-27 2010-10-03
41 2010-10-04 2010-10-10
42 2010-10-11 2010-10-17
43 2010-10-18 2010-10-24
44 2010-10-25 2010-10-31
45 2010-11-01 2010-11-07
46 2010-11-08 2010-11-14
47 2010-11-15 2010-11-21
48 2010-11-22 2010-11-28
49 2010-11-29 2010-12-05
50 2010-12-06 2010-12-12
51 2010-12-13 2010-12-19
52 2010-12-20 2010-12-26
53 2010-12-27 2011-01-02(53 行受影响)*/