代码之家  ›  专栏  ›  技术社区  ›  MicSim

SQL Server中使用DATEPART的周数错误

  •  8
  • MicSim  · 技术社区  · 14 年前

    select datepart(ww, '20100208')
    

    在SQLServer2000中。但是 08.02.2010 第6周 根据 ISO 8601

    根据ISO 8601,我应该如何获得周数值?

    2 回复  |  直到 14 年前
        1
  •  17
  •   thomasb DaveRead    8 年前

    您可以在SQL 2008中轻松完成这项工作,因为它现在支持 isoww 作为第一个datepart参数。然而,这并不是在SQL2000(或2005)中。这里面有一个功能 this 文章将为您在SQL 2000/2005中实现这一点。

    CREATE FUNCTION ISOweek  (@DATE datetime)
    RETURNS int
    AS
    BEGIN
       DECLARE @ISOweek int
       SET @ISOweek= DATEPART(wk,@DATE)+1
          -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104')
       --Special cases: Jan 1-3 may belong to the previous year
       IF (@ISOweek=0) 
          SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1 
             AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
       --Special case: Dec 29-31 may belong to the next year
       IF ((DATEPART(mm,@DATE)=12) AND 
          ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
          SET @ISOweek=1
       RETURN(@ISOweek)
    END
    
        2
  •  7
  •   Juliano Barreto    6 年前

    一个简单的方法是使用 isowk 而不是 wk 如图所示:

    select datepart(isowk, '2010-02-08');