sql >> Database teknologi >  >> RDS >> Sqlserver

Får du ugenummer fra en dato i MS SQL Server 2005?

Vær opmærksom på, at der er forskel på, hvad der anses for det korrekte ugenummer, afhængigt af kulturen. Ugetal afhænger af et par antagelser, der er forskellige fra land til land, se Wikipedia-artikel om sagen. Der er en ISO-standard (ISO 8601), der gælder for ugenumre.

SQL-serveren integrerede DATEPART() funktion gør ikke nødvendigvis det rigtige. SQL Server antager, at dag 1 i uge 1 vil være den 1. januar, for mange applikationer er det forkert.

At beregne ugenumre korrekt er ikke-trivielt, og forskellige implementeringer kan findes på nettet. For eksempel er der en UDF, der beregner ISO-ugenumrene fra 1930-2030, som er en blandt mange andre. Du bliver nødt til at tjekke, hvad der virker for dig.

Denne er fra Books Online (selvom du sikkert vil bruge den fra Jonas Lincolns svar, ser BOL-versionen ud til at være forkert):

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


  1. Integration af værktøjer til at administrere PostgreSQL i produktion

  2. Hvordan får man aktuel dato i PL/SQL?

  3. Hvordan indstiller man en maksimal udførelsestid for en mysql-forespørgsel?

  4. Kopier data fra Salesforce til SQL Server med Spectral Core