sql >> Base de Datos >  >> RDS >> Sqlserver

¿Obtener el número de semana fuera de una fecha en MS SQL Server 2005?

Tenga en cuenta que existen diferencias en lo que se considera el número de semana correcto, según la cultura. Los números de semana dependen de un par de suposiciones que difieren de un país a otro, consulte el artículo de Wikipedia sobre el tema. Existe un estándar ISO (ISO 8601) que se aplica a los números de semana.

El servidor SQL integró DATEPART() función no necesariamente hace lo correcto. SQL Server asume que el día 1 de la semana 1 sería el 1 de enero, para muchas aplicaciones eso es incorrecto.

Calcular correctamente los números de semana no es trivial, y se pueden encontrar diferentes implementaciones en la web. Por ejemplo, hay una UDF que calcula los números de semana ISO de 1930 a 2030, siendo uno entre muchos otros. Tendrás que comprobar qué funciona para ti.

Este es de Books Online (aunque probablemente quieras usar el de la respuesta de Jonas Lincoln, la versión BOL parece ser incorrecta):

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
GO