sql >> Databáze >  >> RDS >> Sqlserver

Získání čísla týdne z data v MS SQL Server 2005?

Uvědomte si, že existují rozdíly v tom, co je považováno za správné číslo týdne, v závislosti na kultuře. Čísla za týdny závisí na několika předpokladech, které se v jednotlivých zemích liší, viz článek na Wikipedii na toto téma. Existuje norma ISO (ISO 8601), která se vztahuje na čísla týdnů.

SQL server integroval DATEPART() funkce nemusí nutně dělat správnou věc. SQL Server předpokládá, že den 1 týdne 1 bude 1. leden, pro mnoho aplikací je to špatně.

Správný výpočet čísel týdnů není triviální a na webu lze nalézt různé implementace. Například existuje UDF, který vypočítává čísla týdnů ISO z let 1930-2030, je jedním z mnoha dalších. Budete muset zkontrolovat, co vám vyhovuje.

Tato je z Books Online (ačkoli pravděpodobně budete chtít použít odpověď z odpovědi Jonase Lincolna, verze BOL se zdá být nesprávná):

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. Python &MySql:Unicode a kódování

  2. SELECT DISTINCT je na mém stole v PostgreSQL pomalejší, než se očekávalo

  3. Použití aktuálního času v UTC jako výchozí hodnoty v PostgreSQL

  4. Složené závorky v T-SQL