SQL - Filtrar hora entre 2 horarios

   
Vista:

Filtrar hora entre 2 horarios

Publicado por Sebastián Barrionuevo (1 intervención) el 01/04/2010 19:08:28
Necesitaría que alguien me de una mano esto, estoy teniendo una columna llamada Fecha en donde tengo date+time y necesitaria hacer un SQL en donde me muestre cualquier dia desde las 06:00:00 hasta las 21:30:00. Probe con between pero no se sacar el date de esa misma columna:

SELECT `Totales$`.Servicio, `Totales$`.Fecha
FROM `Totales$` `Totales$`
WHERE `Totales$`.Servicio IS NOT NULL AND `Totales$`.Fecha BETWEEN '%06:00:00' AND '%21:30:00'

Servicio Fecha
123456 01/03/2010 06:00
123456 01/03/2010 06:30
123456 01/03/2010 07:00
123456 01/03/2010 07:30
123456 01/03/2010 08:00
123456 01/03/2010 08:30
123456 01/03/2010 09:00
123456 01/03/2010 09:30
123456 01/03/2010 10:00
123456 01/03/2010 10:30
123456 01/03/2010 11:00
123456 01/03/2010 11:30
123456 01/03/2010 12:00
123456 01/03/2010 12:30
123456 01/03/2010 13:00
123456 01/03/2010 13:30
123456 01/03/2010 14:00
123456 01/03/2010 14:30
123456 01/03/2010 15:00
123456 01/03/2010 15:30
123456 01/03/2010 16:00
123456 01/03/2010 16:30
123456 01/03/2010 17:00
123456 01/03/2010 17:30
123456 01/03/2010 18:00
123456 01/03/2010 18:30
123456 01/03/2010 19:00
123456 01/03/2010 19:30
123456 01/03/2010 20:00
123456 01/03/2010 20:30
123456 01/03/2010 21:00
123456 01/03/2010 21:30
123456 01/03/2010 22:00
123456 01/03/2010 22:30
123456 01/03/2010 23:00
123456 01/03/2010 23:30
123456 02/03/2010 00:00
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Filtrar hora entre 2 horarios

Publicado por Leonardo Josue (877 intervenciones) el 05/04/2010 17:36:20
Buenos días Sebastián:

En tu pregunta no especificas qué manejador de BD estás utilizando, así es que te voy a poner el ejemplo de cómo se haría con SQL Server y si no es el manejador que usas pues sería cuestión de que encuentres el equivalente. Para comparar fechas es correcto el uso de la cláusula between, pero el operador % sólo se aplica para campos de tipo caractere y con el operador like. Lo que tienes que hacer primero es extraer sólo la hora de tu campo fecha. En SQL Server se obtiene así:

convert(varchar, Totales.Fecha , 108)

Nota. El 108 es para especificar que te obtenga la hora con el formato hh:mm:ss

Si observas estoy convirtiendo el campo datetime a un varchar. La cláusula between sólo funciona para números y fechas, por lo que tengo que convertir ahora este campo a un tipo datetime. por último la hora inicial y final (06:00:00 y 21:30:00) tienes también que convertirlas a tipo datetime para poder compararlos.

Tu consulta quedaría más o menos así:

select Totales.Servicio, Totales.Fecha,
from Totales
where
convert(datetime, convert(varchar, Totales.fecha, 108), 108)
between
convert(datetime, '06:00:00', 108) and
convert(datetime, '21:30:00', 108)
order by 2

Ojo con el nombre de tu tabla. Espero que te sirva el código y si tienes problemas lo comentas en el foro para tratar de ayudarte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar