Generar tabla con secuencia de meses....

21/07/2004 - 21:12 por Eusebio | Informe spam
Hola todos,

necesito una ayuda para generar una tabla con un registro por cada mes entre
un intervalode fechas dado.

Por ejemplo, si el intervalo es Noviembre de 2003 a Febreo de 2004, entonces
agregar un registro
para noviembre y diciembre de 2003, y enero y febrero de 2004.

Lo que quiero es no usar un loopmejor dicho, la solución que implementé
fué mediante en while, pero quiero
"mejorar" el código con una solición más ingeniosaque no se me
ocurre...!!!!



declare @Fdesde datetime , @Fhasta datetime

select @Fdesde = '01/11/2003' , @Fhasta = '01/02/2004'
CREATE TABLE #tMonth ( año int , mes int )


/*

Necesito insertar en la tabla un registro por cada mes entre el
intervalo de fechas dado, como sigue

Año Mes
-
2003 11
2003 12
2004 1
2004 2


*/

muchas gracias por adelantado


Eusebio
 

Leer las respuestas

#1 Fernando España
21/07/2004 - 23:02 | Informe spam
yo tengo algo asi y no es nada lento.


BEGIN
DECLARE @fecha_uno datetime,@fecha_dos datetime,
@vmes int,@vmesc char(2),@vempresa int,@vperiodo char(4)
select @vempresa = (select id_empresa from inserted),
@vperiodo=(select id_periodo from inserted)
SELECT @fecha_uno=(select inicia from inserted),
@fecha_dosÚTEADD(month,1,@fecha_uno)-1,@vmes=1,@vmesc='00'
INSERT INTO tbl_meses(id_empresa,id_periodo,id_mes,inicia,termina,estado)
VALUES (@vempresa,@vperiodo,'00',@fecha_uno-1,@fecha_uno-1,2)
SELECT @vmesc= replicate('0',2-len(CONVERT(char(2), @vmes+1)))
+CONVERT(char(2), @vmes)
WHILE @vmes<13
/*@fecha_dos <= DATEADD(month,12,@fecha_uno)*/
BEGIN
INSERT INTO tbl_meses(id_empresa,id_periodo,
id_mes,inicia,termina,estado)
VALUES (@vempresa,@vperiodo,@vmesc,@fecha_uno,@fecha_dos,1)
SELECT @vmes=@vmes+1
SELECT @vmesc= replicate('0',2-len(CONVERT(char(2),
@vmes)))+CONVERT(char(2), @vmes)
SELECT @fecha_unoÚTEADD(month,1,@fecha_uno)
SELECT @fecha_dosÚTEADD(month,1,@fecha_uno) -1
END

END
INSERT INTO tbl_meses(id_empresa,id_periodo,
id_mes,estado)
VALUES (@vempresa,@vperiodo,@vmesc,2)



Fernando España
Gerente Informatica
ATISA
7a. calle 4-34 Zona 10
Segundo Nivel
Guatemala, Centro America
www.atisa.com.gt
"Eusebio" escribió en el mensaje
news:

Hola todos,

necesito una ayuda para generar una tabla con un registro por cada mes


entre
un intervalode fechas dado.

Por ejemplo, si el intervalo es Noviembre de 2003 a Febreo de 2004,


entonces
agregar un registro
para noviembre y diciembre de 2003, y enero y febrero de 2004.

Lo que quiero es no usar un loopmejor dicho, la solución que


implementé
fué mediante en while, pero quiero
"mejorar" el código con una solición más ingeniosaque no se me
ocurre...!!!!



declare @Fdesde datetime , @Fhasta datetime

select @Fdesde = '01/11/2003' , @Fhasta = '01/02/2004'
CREATE TABLE #tMonth ( año int , mes int )


/*

Necesito insertar en la tabla un registro por cada mes entre el
intervalo de fechas dado, como sigue

Año Mes
-
2003 11
2003 12
2004 1
2004 2


*/

muchas gracias por adelantado


Eusebio


Preguntas similares