我有字符串,比如1037,其中10代表2010年,37代表2010年的第37周。
我想用SQL实现计算1037到今天为止的相隔天数,其中周别可以以一周的第一天算起。请大家帮忙!

解决方案 »

  1.   

    declare @i varchar(10) = '1037'select datediff(dd,dateadd(wk,convert(int,RIGHT(@i,2)),CONVERT(datetime,'20'+LEFT(@i,2)+'-01-01')),GETDATE())--370
      

  2.   

    declare @dt varchar(7)
    set @dt='1037'
    select datediff(d,dateadd(d,number,'20'+LEFT(@dt,2)+'-01-01'),GETDATE()) daycount from master..spt_values
    where type='p' and datepart(wk,dateadd(d,number,'20'+LEFT(@dt,2)+'-01-01'))=convert(int,right(@dt,2))
    and datepart(dw,dateadd(d,number,'20'+LEFT(@dt,2)+'-01-01'))=1 and number<365
    /*
    daycount
    -----------
    382(1 行受影响)*/
      

  3.   

    + declare @i varchar(10) = '1037'select datediff(dd,dateadd(dd,2,dateadd(wk,convert(int,RIGHT(@i,2)) - 2,CONVERT(datetime,'20'+LEFT(@i,2)+'-01-01'))),GETDATE())--382更正,多算了1周,星期日是一周的第一天。
      

  4.   

    or:
    declare @dt varchar(7)
    set @dt='1037'
    select DATEDIFF(d,dt,getdate())+DATEPART(dw,dt)-1 from(
    select DATEADD(wk,convert(int,right(@dt,2))-1,'20'+LEFT(@dt,2)+'-01-01')dt
    )t
    /*
    -----------
    382(1 行受影响)*/
      

  5.   

    set datefirst 1
    declare @date varvhar(10)
    set @date='1037'
    select
      datediff(dd,t,getdate())+datepart(dw,t) 
    from
      (select dateadd(wk,cast(right(@date,2) as int))-1,'20'+left(@date,2)+'-01-01')t