Fechas

Muy pero muy buenas estimados expertos,
tengo un problema que necesito resolver, claro con la ayuda de ustedes. Tratare de ser lo más explicito posible para lograr una respuesta lo más practica posible.
Actualmente tengo un programa que me inserta en una tabla llamada ofertas, las ofertas del mes (ejemplo: articulo, lista de precio, fecha_inicio, Fecha_fin). Tengo un select que primero veririca si la la oferta que estoy insertando ya existe. Si la oferta no existe entonces hace la inserción del registro en caso de que la oferta exista entonces me pregunta si deseo actualizarla.
lo que hasta ahora no he podido controlar es que por ejemplo yo inserto las fechas: Fecha_inicio=01/06/2009 y Fecha_Fin=30/06/2009 y luego puedo insertar una fecha del mismo articulo Fecha_Inicio=10/06/2009 y Fecha_fin=25/06/2009 este ultimo intervalo de fechas ya se encuentra incluida en el intervalo anterior, lo cual me crea una duplicidad de ofertas.
Me gustaría que el programa primero evalúe los intervalos que estoy insertando, como puedo hacer esto. Favor de exporner un ejemplo práctico.
Gracias.

1 Respuesta

Respuesta
1
Si tomamos como referencia...
FechaGuardadaInicio -> Cada una de las fechas de inicio de los registros ya guardados.
FechaGuardadaFin -> Cada una de las fechas finales de los registros ya guardados.
ArticuloGuardado -> Cada uno de los códigos de artículo de los registros ya guardados.
FechaNuevaInicio -> La fecha de inicio propuesta del nuevo artículo.
FechaNuevaFin -> La fecha final propuesta del nuevo artículo.
ArtículoNuevo -> El código propuesto del nuevo artículo.
... tan solo debes comprobar si la FechaNuevaInicio o la FechaFinalInicio están dentro del rango entre FechaGuardadaInicio y FechaGuardadaFin de cualquier registro creado, y que además coincidan ArticuloNuevo y ArticuloGuardado... es decir, la consulta de comprobación sería más o menos...
(
(FechaNuevaInicio >= FechaGuardadaInicio) and (FechaNuevaInicio <= FechaGuardadaFin)
or
(FechaNuevaFin >= FechaGuardadaInicio) and (FechaNuevaFin <= FechaGuardadaFin)
)
And
(ArticuloNuevo = ArticuloGuardado)
Si existe algún registro que coincida con esta consulta, entonces debería preguntar si modificarlo, pues el artículo es el mismo y el nuevo rango propuesto, o bien esta dentro de algún rango ya creado, o bien comienza dentro de algún rango ya creado, o bien finaliza dentro de algún rango ya creado.
Para que quede totalmente claro, debería existir otro grupo de paréntesis (quizás los interiores no sean necesarios, depende de la "tecnologia" SQL que utilices...)
(
(
(FechaNuevaInicio >= FechaGuardadaInicio) and (FechaNuevaInicio <= FechaGuardadaFin)
)
Or
(
(FechaNuevaFin >= FechaGuardadaInicio) and (FechaNuevaFin <= FechaGuardadaFin)
)
)
And
(ArticuloNuevo = ArticuloGuardado)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas