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;