Cómo obtener datos hora por hora (sin importar cuál sea la fecha) en el servidor sql, sé que se puede lograr con datePart (hora, nombre de columna) pero para ser específicos, necesito datos para intervalos específicos, incluidos minutos, independientemente de las fechas.

Escenario: 'TestTable' contiene columna - DBTimestamp con tipo de datos (DateTime)

Necesito todos los registros de 'TestTable' para los cuales 'DBTimestamp' se encuentra entre 3 horas y 35 minutos y 4 horas y 30 minutos, independientemente de la fecha especificada.

1
Kunal Khatri 16 ene. 2018 a las 14:26

3 respuestas

La mejor respuesta

Según tengo entendido, necesita registros que en un rango de tiempo específico, independientemente de la parte de la fecha. Así que se me ocurrió la siguiente solución:

SELECT * FROM (SELECT Id, CAST(Time AS time) [time]
FROM Table) AS Q1
WHERE Q1.time > CAST('03:35:00' AS time)
AND Q1.time < CAST('12:30:00' AS time)

Aquí está SQL Fiddle: http://sqlfiddle.com/#!6/21b313/1

1
İlker Çakır 17 ene. 2018 a las 05:39

Bueno, supongo que podrías hacer alguna variación de lo siguiente:

SELECT * 
FROM TABLE
WHERE (DATEPART(HOUR, TIMESTAMP) = 3 AND DATEPART(MINUTE, TIMESTAMP) >= 35) OR
      (DATEPART(HOUR, TIMESTAMP) = 4 AND DATEPART(MINUTE, TIMESTAMP) <= 30)
0
Danieboy 16 ene. 2018 a las 11:39

Puedes usar esto.

SELECT * FROM TestTable WHERE CAST(DBTimestamp AS TIME) BETWEEN '03:35' AND '04:30' 
2
Serkan Arslan 16 ene. 2018 a las 11:40