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.

Preguntas similare

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.



Respuesta Responder a este mensaje
#2 Jorge Guillen
02/02/2009 - 17:53 | Informe spam
Gracias


"Carlos Sacristan" escribió en
el mensaje news:

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.



Respuesta Responder a este mensaje
#3 Ricardo Passians
02/02/2009 - 17:56 | Informe spam

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))





Quizás comparando los dos rangos de forma invertida:

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


Pero no dices si C_INI y C_FIN (que según tu ejemplo son tipo DateTime) ya
contienen la misma fecha de C_FEC, con lo cual podrías economizarte la
condición "C_FEC=@FECHA":

Es decir:

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

Mandando directamente en @INI y @FIN las dos fecha-horas de inicio y fin de
la reservación.

Espero te sirva,

Ricardo Passians
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida