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

calcular fechas ocupadas entre 2 fechas

Estas en el tema de calcular fechas ocupadas entre 2 fechas en el foro de Mysql en Foros del Web. Hola a todos, quiero hacer una consulta sql pero no doy con la tecla. En una bd tengo dos campos de tipo fecha (fechadesde y ...
  #1 (permalink)  
Antiguo 13/05/2008, 12:04
Avatar de Ragher  
Fecha de Ingreso: octubre-2004
Ubicación: Rosario, Argentina
Mensajes: 81
Antigüedad: 19 años, 5 meses
Puntos: 0
calcular fechas ocupadas entre 2 fechas

Hola a todos, quiero hacer una consulta sql pero no doy con la tecla. En una bd tengo dos campos de tipo fecha (fechadesde y fechahasta) para manejar periodos de reservas.

Ejemplo:

nombre | fechadesde | fechahasta
habitacion1 |2008/05/13 | 2008/05/15

Para mi ejemplo necesitaria una consulta que me diga que las fechas 2008/05/13, 2008/05/14 y 2008/05/15 se encuentran ocupadas para la habitacion1 para asi no volver a alquilarla dentro de ese periodo de fechas pero como les dije antes no doy con la tecla.

Preguntando de otra manera. Como hago para saber si un rango de Fechas fecha1, fecha2 no esta dentro de otro rango de fechas fech1 y fech2 mediante SQL.

Agradezco de antemano la ayuda de los expertos de este foro.
__________________
Pronexo.com Diseño web Rosario, San Lorenzo, Argentina

Última edición por Ragher; 13/05/2008 a las 12:50
  #2 (permalink)  
Antiguo 14/05/2008, 10:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Re: calcular fechas ocupadas entre 2 fechas

No se si te servirá:

he hecho el planteaminto distinto con los mismos datos

THabitaciones
Habitacion
....

Contiene todas la habitaciones


TReservas
Habitacion
fechadesde
fechahasta
....

continen todas la reservas

Necesitaremos una consulta con una subconsulta para obtener las habitaciones libres en un periodo dado

Si tenemos

$fechainicial
$fechafinal

variables con las fechas inicial y final que se pretenden reservar (periodo buscado).


Subconsulta para obtener la habitacion de las reservas involucradas en el periodo buscado:



Código:
SELECT DISTINCT TReservas.habitacion, 
             FROM TReservas
WHERE (TReservas.fechadesde<=$fechainicial 
             AND TReservas.fechahasta>$fechainicial) <--r. $fechainicial ocupada
     OR (TReservas.fechadesde<=$fechafinal 
            AND TReservas.fechahasta>$fechafinal) <--r. $fechafinal ocupada
     OR (TReservas.fechadesde>$fechainicial 
            AND TReservas.fechahasta)<$fechafinal);<--r. cuyas fechas estan dentro del periodo buscado 
si la consulta anterior nos da las habitaciones que tienen algun dia ocupado del periodo buscado luego es facil obtener las que no tinen ningun dia ocupado es decir que estan libres en el periodo buscado:


Código:
SELECT THabitaciones.Habitacion
FROM THabitaciones
WHERE THabitaciones.Habitacion Not In 
      (SELECT DISTINCT TReservas.habitacion, 
      FROM TReservas
      WHERE (TReservas.fechadesde<=$fechainicial 
         AND TReservas.fechahasta>$fechainicial) <--r. $fechainicial ocupada
      OR (TReservas.fechadesde<=$fechafinal 
         AND TReservas.fechahasta>$fechafinal) <--r. $fechafinal ocupada
      OR (TReservas.fechadesde>$fechainicial 
            AND TReservas.fechahasta)<$fechafinal));<--r. cuyas fechas estan dentro del periodo buscado 
Con programación habria muchas otras forma de hacerlo pero con sql puro solo se me ocurre esta, se que no es exàctamente lo que querias pero con esta informacion podrias hacer la reserva.

Quim
  #3 (permalink)  
Antiguo 14/05/2008, 12:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Re: calcular fechas ocupadas entre 2 fechas

Quim,
yo me encontré esta pregunta en bases de datos y traté de orientarlo con una lógica que consideré adecuada. Os pongo el enlace:
http://www.forosdelweb.com/f21/calcu...fechas-586042/
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




La zona horaria es GMT -6. Ahora son las 12:07.