- SET ANSI_NULLS ON
- GO
-
- SET QUOTED_IDENTIFIER ON
- GO
-
- CREATE FUNCTION [dbo].[svf_Week]
- (
- @StartYear INT,
- @EndYear INT
- )
- RETURNS @Week TABLE([ID] INT IDENTITY(1,1) PRIMARY KEY,[Year] [INT] NULL,[Week] [INT] NULL,[StartDate] [DATETIME] NULL,[EndDate] [DATETIME] NULL)
- AS
- BEGIN
- DECLARE @StartDateOfYear DATETIME
- DECLARE @LastDateOfYear DATETIME
- DECLARE @WeekStartDate DATETIME
- DECLARE @WeekEndDate DATETIME
- DECLARE @Weeks INT
-
- WHILE @StartYear <= @EndYear
- BEGIN
- SET @StartDateOfYear = CAST((CAST(@StartYear AS VARCHAR(4)) + '-01-01') AS DATETIME)
- SET @LastDateOfYear= CAST((CAST(@StartYear AS VARCHAR(4))+ '-12-31') AS DATETIME)
- SET @Weeks = 1
-
- DECLARE @WeekStartDateOfYear DATETIME
- IF DATEPART(DW,@StartDateOfYear) > 4
- SET @WeekStartDateOfYear = DATEADD(DAY,(8 - DATEPART(DW,@StartDateOfYear)) ,@StartDateOfYear)
- ELSE
- SET @WeekStartDateOfYear = DATEADD(DAY,(-(DATEPART(DW,@StartDateOfYear)-1)),@StartDateOfYear)
- SET @WeekStartDate = @WeekStartDateOfYear
- SET @WeekEndDate = DATEADD(DAY,6,@WeekStartDate)
- WHILE DATEDIFF(DAY,@WeekStartDate,@LastDateOfYear) >= 4
- BEGIN
- INSERT INTO @Week([Year],[Week],[StartDate],[EndDate]) VALUES (@StartYear,@Weeks,@WeekStartDate,@WeekEndDate)
- SET @Weeks = @Weeks + 1
- SET @WeekStartDate = @WeekStartDate + 7
- SET @WeekEndDate = @WeekEndDate + 7
- END
- SET @StartYear = @StartYear + 1
- END
- RETURN
- END
- GO