Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > SQL Server

Respuesta
 
Herramientas Desplegado
Antiguo 07-may-2008, 04:55   #1 (permalink)
manguita82 ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 2
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
manguita82 está desconectado   Responder Citando
Antiguo 07-may-2008, 09:06   #2 (permalink)
Moderador
RootK llegará a ser famoso muy prontoRootK llegará a ser famoso muy pronto
 
Avatar de RootK
 
Fecha de Ingreso: noviembre-2002
Ubicación: México D.F
Mensajes: 7.524
Enviar un mensaje por MSN a RootK
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 . . .
RootK está desconectado   Responder Citando
Antiguo 07-may-2008, 17:29   #3 (permalink)
Beakdan está en el buen camino
 
Avatar de Beakdan
 
Fecha de Ingreso: noviembre-2002
Ubicación: México, D.F.
Mensajes: 364
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')
Beakdan está desconectado   Responder Citando
Antiguo 08-may-2008, 06:06   #4 (permalink)
Colaborador
Andres95 tiene algunos puntos positivos de karma
 
Avatar de Andres95
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.060
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 innovación sólo es un grupo de gente divirtiéndose.
Andres95 está desconectado   Responder Citando
Antiguo 22-may-2008, 06:14   #5 (permalink)
manguita82 ha deshabilitado el karma
 
Fecha de Ingreso: mayo-2008
Mensajes: 2
Respuesta: SQL Server: a partir de dos fechas, sacar todos los meses entre esas dos f

Muchas gracias!!!

Me ha funcionado estupendamente!!!

Saludos
manguita82 está desconectado   Responder Citando
Respuesta
Calificación: Calificación de Tema: 1 votos, 4,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 03:02.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93