Torna al Thread

USE tempdb; GO /* Imposto come il lunedì come primo giorno della settimana */ SET DATEFIRST 1; GO CREATE PROCEDURE dbo.up_GetDate( @week tinyint, @year smallint, @Date smalldatetime OUTPUT ) AS DECLARE @MinWeek tinyint DECLARE @MaxWeek tinyint DECLARE @MinYear smallint DECLARE @MaxYear smallint DECLARE @FirstDayOfYear tinyint SET @MinWeek = 1 SET @MaxWeek = 53 SET @MinYear = 1900 SET @MaxYear = 2079 /* Verifico i parametri di input */ IF NOT @week BETWEEN @MinWeek AND @MaxWeek BEGIN RAISERROR('Settimana non valida: inserire un valore compreso tra %d e %d',16, 1, @MinWeek, @MaxWeek) RETURN 0 END IF NOT @year BETWEEN 1900 AND 2079 BEGIN RAISERROR('Anno non valido: inserire un valore compreso tra %d e %d',16, 1, @MinYear, @MaxYear) RETURN 0 END /* Ricavo il weekday del primo giorno dell'anno */ SET @FirstDayOfYear = DATEPART(weekday, CAST(@year AS char(4)) + '0101') /* Calcolo il lunedì della settimana e anno specificati */ SELECT @Date = DATEADD(week, @week - 1, CAST(@year AS char(4)) + '0101') - @FirstDayOfYear + 1 RETURN 1 GO DECLARE @Date smalldatetime; EXEC dbo.up_GetDate 34, 2006, @Date OUTPUT; SELECT @Date AS [Date]; GO /* Output: Date -------------------- 2006-08-14 00:00:00 (1 row(s) affected) */ DROP PROCEDURE dbo.up_GetDate;
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5