Ver Mensaje Individual
  #10 (permalink)  
Antiguo 17/10/2008, 13:22
eddy_neo69
 
Fecha de Ingreso: octubre-2008
Mensajes: 1
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Calcular periodo que abarca un numero de semana

Hola yo tenia el mismo problema y la verdad es que no encontre ayuda en ningun, foro asi que cree esta funcion espero que les sirva a las proximas personas con el mismo problema.
para SQL Server


CREATE FUNCTION fn_ObtenerPeriodoSemana(@Anio AS INT, @SemanaNum AS INT)
RETURNS VARCHAR(100)
AS
/***************************** ENCABEZADO ************************************
************************************************** ****************************
** NOMBRE: fn_ObtenerPeriodoSemana **
** DESCRIPCION: Retorna el periodo en fecha al que corresponde el numero de **
** semana segun el anio **
** CREADOR:Eddy_Neo **
********************* REGISTRO DE MODIFICACIONES *****************************
************************************************** ****************************
Fecha Descripcion
-----------------------------------------------------------------------------
2008.Oct.17 Creación de la función
************************************************** ***************************/
BEGIN
DECLARE @PeriodoDescripcion AS VARCHAR(100)
DECLARE @SemenaFecha AS DATETIME

SET @SemenaFecha = CONVERT(DATETIME, CAST(@Anio AS VARCHAR(4))+'-01-01')

IF(DATENAME(dw, @SemenaFecha) = 'Sunday')
BEGIN
SELECT @PeriodoDescripcion = CONVERT(VARCHAR(100), (DATEADD(d, -7, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103) + ' al ' + CONVERT(VARCHAR(100), (DATEADD(d, -1, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103)
END
IF(DATENAME(dw, @SemenaFecha) = 'Monday')
BEGIN
SELECT @PeriodoDescripcion = CONVERT(VARCHAR(100), (DATEADD(d, -8, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103) + ' al ' + CONVERT(VARCHAR(100), (DATEADD(d, -2, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103)
END
IF(DATENAME(dw, @SemenaFecha) = 'Tuesday')
BEGIN
SELECT @PeriodoDescripcion = CONVERT(VARCHAR(100), (DATEADD(d, -9, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103) + ' al ' + CONVERT(VARCHAR(100), (DATEADD(d, -3, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103)
END
IF(DATENAME(dw, @SemenaFecha) = 'Wednesday')
BEGIN
SELECT @PeriodoDescripcion = CONVERT(VARCHAR(100), (DATEADD(d, -10, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103) + ' al ' + CONVERT(VARCHAR(100), (DATEADD(d, -4, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103)
END
IF(DATENAME(dw, @SemenaFecha) = 'Thursday')
BEGIN
SELECT @PeriodoDescripcion = CONVERT(VARCHAR(100), (DATEADD(d, -11, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103) + ' al ' + CONVERT(VARCHAR(100), (DATEADD(d, -5, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103)
END
IF(DATENAME(dw, @SemenaFecha) = 'Friday')
BEGIN
SELECT @PeriodoDescripcion = CONVERT(VARCHAR(100), (DATEADD(d, -12, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103) + ' al ' + CONVERT(VARCHAR(100), (DATEADD(d, -6, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103)
END
IF(DATENAME(dw, @SemenaFecha) = 'Saturday')
BEGIN
SELECT @PeriodoDescripcion = CONVERT(VARCHAR(100), (DATEADD(d, -13, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103) + ' al ' + CONVERT(VARCHAR(100), (DATEADD(d, -7, DATEADD(ww, @SemanaNum, @SemenaFecha))), 103)
END

RETURN @PeriodoDescripcion
END