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

Preguntas similare

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


Respuesta Responder a este mensaje
#2 Javier Loria
21/07/2004 - 23:12 | Informe spam
Hola:
Si tienes una Tabla con numeros consecutivos es muy facil:
=SELECT YEAR(DATEADD(Month, Numero, '2003-11-01'))
, MONTH(DATEADD(Month, Numero, '2003-11-01'))
FROM Numeros
WHERE DATEADD(Month, Numero, '2003-11-01')<='2004-02-01'
= Espero que sea suficientemente ingeniosa :D
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Eusebio escribio:
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
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida