Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Uzyskiwanie numeru tygodnia od daty w MS SQL Server 2005?

Należy pamiętać, że istnieją różnice w tym, co jest uważane za prawidłowy numer tygodnia, w zależności od kultury. Numery tygodni zależą od kilku założeń, które różnią się w zależności od kraju, zobacz artykuł w Wikipedii na ten temat. Istnieje norma ISO (ISO 8601), która dotyczy numerów tygodni.

Zintegrowany serwer SQL DATEPART() funkcja niekoniecznie musi robić właściwą rzecz. SQL Server zakłada, że ​​pierwszym dniem tygodnia 1 będzie 1 stycznia, w przypadku wielu aplikacji jest to błąd.

Prawidłowe obliczenie numerów tygodni nie jest trywialne, a w sieci można znaleźć różne implementacje. Na przykład istnieje UDF, który oblicza numery tygodni ISO z lat 1930-2030, będąc jednym z wielu innych. Musisz sprawdzić, co Ci odpowiada.

Ten pochodzi z Books Online (chociaż prawdopodobnie chcesz użyć tego z odpowiedzi Jonasa Lincolna, wersja BOL wydaje się nieprawidłowa):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. czy można wybrać bezpośrednio jako bit?

  2. Zobacz historię zadań agenta SQL Server za pomocą programu SSMS

  3. Wstaw wszystkie dane z datagridview do bazy danych na raz

  4. EF5:Nie można dołączyć pliku „{0}” jako bazy danych „{1}”

  5. Wielowątkowa aplikacja C# z wywołaniami bazy danych SQL Server