Hola de nuevo alvaro... tu problema no es tan trivial, pero tampoco tan difícil... te explico la lógica se me ocurrió para resolver tu problema:
Lo primero que pensé fue simplemente en obtener la diferencia en días entre las dos fechas y multiplicarla por 9 (qué es el número de horas entre las 8:00 y las 17:00, pero existe un problema y es que la fecha inicial puede comenzar después de las 8:00, por lo tanto debería tomar sólo las horas que le corresponden de ese día... lo mismo ocurre con la fecha de fin, si ocurre antes de las 17:00 entonces no se deben contabilizar las 9 horas para ese día, sino la fracción correspondiente. La solución que se me ocurrió entonces es restar al total de horas "completas" las horas que no se deben considerar tanto del primer día, como del último (si fuera el caso). Veamos un ejemplo. Supongamos que tus fechas son las siguientes:
es decir comienzan después de las 8:00 pero terminan antes de las 17:00 del siguiente día.
La lógica que seguí fue lo siguiente.
Primero, Obtener el número de días entre las fechas + 1 y multiplicarlo * 9 (es decir esto):
ahora bien, para obtener el número de horas que se tendrían que restar del primer día podrías hacerlo asi:
Esto quiere decir que la fecha de inicio comenzó una hora después de las 8:00 por lo tanto se tiene que restar 1 hora al resultado inicial. La misma lógica se seguiría para la fecha final:
es decir, la fecha de fin concluyó 4 horas antes de las 15:00. observa que en ambos casos, el valor else es 0, es decir, si la fecha inicial es antes de las 8 y/o la final de después de las 15 hrs entonces no se tiene que restar nada
Ahora sí, para obtener el resultado final simplemente tendías que aplicar la siguiente fórmula:
primer resultado - segundo resultado - tercer resultado
o lo que es lo mismo
Esto podrías hacerlo por parte o en una sola consulta. Te toca hacer la fórmula para obtener de manera dinámica la fechaini y fechafin. Dale un vistazo y cualquier duda la comentas en el foro.
Saludos
Leo.