Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   SQL Server (http://www.forosdelweb.com/f87/)
-   -   SQL Server: a partir de dos fechas, sacar todos los meses entre esas dos fechas (http://www.forosdelweb.com/f87/sql-server-partir-dos-fechas-sacar-todos-meses-entre-esas-dos-fechas-583774/)

manguita82 07/05/2008 04:55

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

RootK 07/05/2008 09:06

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

Beakdan 07/05/2008 17:29

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')


Andres95 08/05/2008 06:06

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.


:arriba: Saludos a todos!

manguita82 22/05/2008 06:14

Respuesta: SQL Server: a partir de dos fechas, sacar todos los meses entre esas dos f
 
Muchas gracias!!!

Me ha funcionado estupendamente!!!

Saludos


La zona horaria es GMT -6. Ahora son las 09:23.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.