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的型式谢谢!

解决方案 »

  1.   

    这得看你自己怎么定义了.例如:
    2011-01-01 --> 2011年的第一周的星期六.
    2011-01-01 --> 2010年的第五十三周的星期六.不过大多数都认为是:2011年的第一周的星期六.
      

  2.   

    declare @dt varchar (10)
    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 行受影响)*/