Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

SQL Server: a partir de dos fechas, sacar todos los meses entre esas dos fechas

Estas en el tema de SQL Server: a partir de dos fechas, sacar todos los meses entre esas dos fechas en el foro de SQL Server en Foros del Web. Hola!! Tengo una tabla de origen donde cada registro tiene una fecha de inicio de validez y una fecha de finalización . Estos datos los ...
  #1 (permalink)  
Antiguo 07/05/2008, 04:55
 
Fecha de Ingreso: mayo-2008
Mensajes: 2
Antigüedad: 15 años, 11 meses
Puntos: 0
SQL Server: a partir de dos fechas, sacar todos los meses entre esas dos fechas

Hola!!

Tengo una tabla de origen donde cada registro tiene una fecha de inicio de validez y una fecha de finalización . Estos datos los quiero llevar a otra tabla, pero creando un registro por cada mes que hay entre las fechas de inicio y de fin de la tabla de origen. Es decir,.

Tabla origen A:

ID_PRODUCTO PRECIO FECHA_INICIO FECHA_FIN
XXX 32 2007/12/01 2008/03/31


Tabla destino B:

ID_PRODUCTO PRECIO FECHA
XXX 32 2007/12/01
XXX 32 2008/01/01
XXX 32 2008/02/01
XXX 32 2008/03/01


Es posible, cómo lo podría hacer???

Muchísimas gracias
  #2 (permalink)  
Antiguo 07/05/2008, 09:06
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Re: SQL Server: a partir de dos fechas, sacar todos los meses entre esas dos fechas

puedes hacerlo así:

Código:
declare @begdate as datetime
declare @enddate as datetime
declare @diff as int

set @begdate = (select FECHA_INICIO from tablaA)
set @enddate = (select FECHA_FIN from tablaA)
set @diff = datediff(day, @begdate ,@enddate)

while (@begdate <= @enddate) --insertar el registro hasta que fecha inicio y fin sean iguales
begin
        insert into tablaB (ID_PRODUCTO, PRECIO, FECHA)
                        value  ('XXX',32,@begdate)
	set @begdate = dateadd(day,1,@begdate) --vamos incrementando los días
end
Saludos
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 07/05/2008, 17:29
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Re: SQL Server: a partir de dos fechas, sacar todos los meses entre esas dos fechas

También puedes solucionarlo usando una tabla de números. Algo muy útil para solucionar muchos tipos de problemas sin usar bucles o cursores.
Bueno, en caso de que no tengas una ya creada prueba con este script:
Código:
--En caso de que no la tengas ya creada, creamos una con unos cuantos valores
DECLARE @numbers TABLE(N INT NOT NULL)
INSERT INTO @numbers
SELECT 0 UNION ALL
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 9

--Código que nos interesa
-----------------------
SELECT        DATEADD(mm, N, '20071201')
FROM        @numbers    --Tabla de números
WHERE        N <= DATEDIFF(mm, '20071201', '20080331')
  #4 (permalink)  
Antiguo 08/05/2008, 06:06
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: SQL Server: a partir de dos fechas, sacar todos los meses entre esas dos fechas

La opcion que comenta Beakdan es la que yo he utilizado en casos similares.


Saludos a todos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 22/05/2008, 06:14
 
Fecha de Ingreso: mayo-2008
Mensajes: 2
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: SQL Server: a partir de dos fechas, sacar todos los meses entre esas dos f

Muchas gracias!!!

Me ha funcionado estupendamente!!!

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:27.