Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Mysql (http://www.forosdelweb.com/f86/)
-   -   calcular fechas ocupadas entre 2 fechas (http://www.forosdelweb.com/f86/calcular-fechas-ocupadas-entre-2-fechas-586007/)

Ragher 13/05/2008 12:04

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.

quimfv 14/05/2008 10:41

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

jurena 14/05/2008 12:35

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/


La zona horaria es GMT -6. Ahora son las 10:17.

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