Hola p414:
La verdad está bastante rara la consulta, El '16' formaría parte de la condición Between que estás armando:
Código:
'16' BETWEEN
datepart(hh,Hora_Inicio) AND
datepart(hh,dateadd(MINUTE,(Duracion*60)-1,Hora_Inicio))
La primera parte del between estaría extrayendo la hora de inicio. La segunda parte del Between, hace uso del campo DURACION (me imagino que existe también en tu tabla reservaciones) que corresponde al número de horas que va a durar la junta. por lo tanto, con este dato y la fecha de inicio obtiene la hora de fin de la junta .
De tal manera que la traducción de la condición sería:
"todas aquellas juntas cuyo desarrollo ocurra entre las 16 horas"
supongamos que tienes en tu tabla las siguientes reservaciones
Código:
id|hora_inicio|duracion
---------------------------------------
1|2011-05-16 15:00:00|1
2|2011-05-16 15:00:00|2
3|2011-05-16 16:00:00|1
4|2011-05-16 17:00:00|1
es decir, tienes una reservación a las 3pm y dura 1 hora, una reservación a las 4 pm y dura dos horas, una reservación a las 4pm y dura 1 hora y una reservación a las 5pm y dura 1 hora
ahora buen, para calcular la hora de término lo que hace la consulta es multiplicar la duración por 60 y restarle 1, para obtener el número de minutos, por lo tanto la hora de termino para cada reservación quedaría como:
Código:
id|hora_inicio|solo_hora_inicio|hora_fin|solo_hora_fin
------------------------------------------------------------------------
1|2011-05-16 15:00:00.000|15|2011-05-16 15:59:00.000|15
2|2011-05-16 15:00:00.000|15|2011-05-16 16:59:00.000|16
3|2011-05-16 16:00:00.000|16|2011-05-16 18:59:00.000|18
4|2011-05-16 17:00:00.000|17|2011-05-16 17:59:00.000|17
con esta tabla se observa que sólo las juntas con id's 2 y 3 se llevan a cabo alrededor de las 4 de la tarde. Te dejo un script donde se ve más o menos el comportamiento de la consulta según lo que pude entender.
Código SQL:
Ver originalDECLARE @reservaciones TABLE (id INT, hora_inicio datetime, duracion INT)
INSERT INTO @reservaciones VALUES (1, '2011-05-16 15:00:00', 1)
INSERT INTO @reservaciones VALUES (2, '2011-05-16 15:00:00', 2)
INSERT INTO @reservaciones VALUES (3, '2011-05-16 16:00:00', 3)
INSERT INTO @reservaciones VALUES (4, '2011-05-16 17:00:00', 1)
SELECT id,
hora_inicio,
datepart(hh,hora_Inicio) solo_hora_inicio,
dateadd(MINUTE,(Duracion*60)-1,Hora_Inicio) hora_fin,
datepart(hh,dateadd(MINUTE,(Duracion*60)-1,Hora_Inicio)) solo_hora_fin
FROM @reservaciones
SELECT * FROM @reservaciones WHERE
'16' BETWEEN datepart(hh,hora_Inicio) AND
datepart(hh,dateadd(MINUTE,(Duracion*60)-1,Hora_Inicio))
Finalmente dos observaciones, primero: la consulta está mezclando tipos de datos, por un lado el 16 lo pone como cadena, sin embargo datepart regresa un entero, por lo tanto se realiza una conversión implícita antes de hacer la comparación.
segundo, por favor
NO UTILICES PALABRAS CON OFENSAS no importa que sean en inglés o en cualquier otro lenguaje diferente al español. los foristas no tenemos la culpa de tu grado de frustación. Yo estuve tentado a no responder este post por ese detalle. OJO CON ESO.
Código:
EDITADO: me tardé tanto en escribir tanto rollo que no vi que ya habías resuelto el problema jejeje. Saludos
Saludos y espero que pronto resuelvas tu problema.
Leo.