sql >> Database >  >> RDS >> Sqlserver

Weeknummer van een datum halen in MS SQL Server 2005?

Houd er rekening mee dat er verschillen zijn in wat als het juiste weeknummer wordt beschouwd, afhankelijk van de cultuur. Weeknummers zijn afhankelijk van een aantal aannames die van land tot land verschillen, zie Wikipedia-artikel hierover. Er is een ISO-norm (ISO 8601) die van toepassing is op weeknummers.

De SQL-server integreerde DATEPART() functie niet noodzakelijk het juiste doet. SQL Server gaat ervan uit dat dag 1 van week 1 1 januari zou zijn, voor veel applicaties is dat fout.

Het correct berekenen van weeknummers is niet triviaal, en verschillende implementaties zijn te vinden op het web. Er is bijvoorbeeld een UDF die de ISO-weeknummers van 1930-2030 berekent, een van de vele andere. Je moet kijken wat voor jou werkt.

Deze is van Books Online (hoewel je waarschijnlijk die van Jonas Lincoln's antwoord wilt gebruiken, lijkt de BOL-versie onjuist te zijn):

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. Wat is de beste manier om met DBNull's om te gaan?

  2. Draait de server op host localhost (::1) en accepteert hij TCP/IP-verbindingen op poort 5432?

  3. Hoe ORDER BY-clausule in SQL te gebruiken?

  4. Database-e-mail configureren in SQL Server