Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Получаване на номер на седмица от дата в MS SQL Server 2005?

Имайте предвид, че има разлики в това, което се счита за правилен номер на седмицата, в зависимост от културата. Броят на седмиците зависи от няколко предположения, които се различават в различните страни, вижте статията в Уикипедия по въпроса. Има стандарт ISO (ISO 8601), който се прилага за номерата на седмиците.

SQL сървърът интегрира DATEPART() функцията не прави непременно правилното нещо. SQL Server приема, че ден 1 от седмица 1 ще бъде 1 януари, за много приложения това е погрешно.

Правилното изчисляване на числата за седмици е нетривиално и в мрежата могат да бъдат намерени различни реализации. Например, има UDF, който изчислява числата на ISO седмици от 1930-2030 г., като е един от многото други. Ще трябва да проверите какво работи за вас.

Това е от Books Online (въпреки че вероятно искате да използвате този от отговора на Джонас Линкълн, версията BOL изглежда е неправилна):

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. Инструкция PRINT в T-SQL

  2. Съвети за използване на SQL Server със Salesforce

  3. Как да конвертирате Unix Timestamp в стойност на дата/час в SQL Server

  4. Използвайте OBJECTPROPERTY(), за да определите дали даден обект е изглед в SQL Server

  5. Как мога да реша проблем с пула за връзки между ASP.NET и SQL Server?