ayuda con query

02/02/2009 - 17:18 por Jorge Guillen | Informe spam
Hola
Tengo una tabla que guarda la disponibilidad de salas para reuniones.
La estructura es la siguiente:
TABLA "SALAS"
ID_REG int -- correlativo unico
C_SALA int -- codigo de la sala
C_FEC datetime -- fecha de reserva de la sala
C_INI datetime -- hora de inicio de la reunion
C_FIN datetime -- hora de fin de la reunion

Necesito saber, la disponibilidad de la sala de reunion.
He hecho un store al cual le envio por parametros, el codigo de la sala, la
fecha, y la hora de inicio y fin. Me devuelve 0 si hay disponibilidad y
mayor a 0 si esta ocupada.

He probado con algunas horas, pero no me sale del todo bien, la parte del
select es el siguiente:

SELECT COUNT(*) FROM SALAS
WHERE C_SALA=@SALA AND C_FEC=@FECHA
AND ((@INI>=C_INI AND @INI<C_FIN) OR (@FIN>C_INI AND @FIN<=C_FIN))

Donde @SALA, @FECHA, @INI, @FIN son los parametros que envio (los tipos de
datos son los mismos de la tabla)

Por dar un ejemplo, actualmente tengo como dato en la tabla : Sala=5,
Fecha'/01/2009, Hora Inicio:00am, Hora Fin=4:00am

Si le mando como parametro, Sala=5, Fecha'/01/2009,HoraInicio:30,
HoraFin:00, me devuelve 1, es decir esta ocupado.
Pero si le mando: Sala=5,Fecha'/01/2009,HoraInicio=1:00am,HoraFin=5:00am,
me devuelve 0, cuando me deberia devolver 1...

Les agradezco la ayuda.

JorgeG.
 

Leer las respuestas

#1 Carlos Sacristan
02/02/2009 - 17:43 | Informe spam
Una posible solución:

DECLARE @fi DATETIME, @ff DATETIME, @ri DATETIME, @rf DATETIME

SELECT @fi = '20090127 02:00', @ff = '20090127 04:00', @ri ='20090127
02:30', @rf = '20090127 5:00'

IF @fi BETWEEN @ri AND @rf OR @ff BETWEEN @ri AND @rf
PRINT 'esta ocupada'
ELSE
PRINT 'libre'


SELECT @fi = '20090127 02:00', @ff = '20090127 04:00', @ri ='20090127 1:00',
@rf = '20090127 5:00'

IF @fi BETWEEN @ri AND @rf OR @ff BETWEEN @ri AND @rf
PRINT 'esta ocupada'
ELSE
PRINT 'libre'



Un saludo
-
www.navento.com
Servicios de Localización GPS


"Jorge Guillen" wrote:

Hola
Tengo una tabla que guarda la disponibilidad de salas para reuniones.
La estructura es la siguiente:
TABLA "SALAS"
ID_REG int -- correlativo unico
C_SALA int -- codigo de la sala
C_FEC datetime -- fecha de reserva de la sala
C_INI datetime -- hora de inicio de la reunion
C_FIN datetime -- hora de fin de la reunion

Necesito saber, la disponibilidad de la sala de reunion.
He hecho un store al cual le envio por parametros, el codigo de la sala, la
fecha, y la hora de inicio y fin. Me devuelve 0 si hay disponibilidad y
mayor a 0 si esta ocupada.

He probado con algunas horas, pero no me sale del todo bien, la parte del
select es el siguiente:

SELECT COUNT(*) FROM SALAS
WHERE C_SALA=@SALA AND C_FEC=@FECHA
AND ((@INI>=C_INI AND @INI<C_FIN) OR (@FIN>C_INI AND @FIN<=C_FIN))

Donde @SALA, @FECHA, @INI, @FIN son los parametros que envio (los tipos de
datos son los mismos de la tabla)

Por dar un ejemplo, actualmente tengo como dato en la tabla : Sala=5,
Fecha'/01/2009, Hora Inicio:00am, Hora Fin=4:00am

Si le mando como parametro, Sala=5, Fecha'/01/2009,HoraInicio:30,
HoraFin:00, me devuelve 1, es decir esta ocupado.
Pero si le mando: Sala=5,Fecha'/01/2009,HoraInicio=1:00am,HoraFin=5:00am,
me devuelve 0, cuando me deberia devolver 1...

Les agradezco la ayuda.

JorgeG.



Preguntas similares