ISO Week w SQL Server

ISO Week jest powszechnie używanym standardem pokazującym kolejny numer tygodnia w danym  roku w formie liczbowej. Najważniejsze jego cechy w odróżnieniu od innych formatów, to:

  •  poniedziałek uwzględniany jest jako pierwszy dzień tygodnia
  • pierwszy tydzień danego roku zawiera pierwszy dzień roboczy tego roku.

W wersjach SQL Server 2008 R2 i wyższych problem jest rozwiązany poprzez szersze zastosowanie funkcji DATEPART(). W starszych wersjach SQL Server problem ten możemy rozwiązać poprzez napisanie prostej funkcji. Przykład poniżej:

CREATE function TK_ISOWEEK(@date datetime)
RETURNS INT
as
BEGIN
RETURN (datepart(DY, datediff(d, 0, @date) / 7 * 7 + 3)+6) / 7
END

Obie funkcje możemy wykorzystać w poniżej opisany sposób:

select
dbo.TK_ISOWEEK('2016-01-04') -- wersje sql server starsze niż 2008R2
,datepart(iso_week, '2016-01-04') -- wersje sql server 2008R2 oraz nowsze.
;

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *