2012-04-05 9 views
5

Estoy intentando crear una consulta que se seleccionará en base a una columna DateTimeSyncDate.Consulta para seleccionar entre dos veces al día

Como antecedentes, la tabla que consulto obtiene importaciones diarias en miles a la misma hora todos los días. Quiero encontrar las entradas que no importaron a la hora "regular" del día.

Por lo tanto, deseo consultar dónde está la hora en la columna DateTime entre dos veces: digamos 14: 00-14: 30 (2-230) en CUALQUIER período día/mes/año.

SELECT * FROM MyTable 
WHERE DatePart(SyncDate, ..?) BETWEEN (14:00..?) and (14:30..?) 

La función DatePart parece ser lo que necesito, pero no entiendo cómo se aplica a esta situación. Su ayuda es muy apreciada, oh grandes luchadores.

EDITAR: Estaba equivocado, estoy ejecutando SQL-Server-2005 como mi back-end. ¡Lo siento!

Respuesta

21

Ya que estás en SQL Server 2008 , puede utilizar el nuevo tipo de datos TIME:

SELECT * FROM MyTable 
WHERE CAST(SyncDate AS TIME) BETWEEN '14:00' and '14:30' 

Si su base de 2008 no es todavía :-) entonces se necesitaría algo así como:

SELECT * FROM MyTable 
WHERE DATEPART(HOUR, SyncDate) = 14 AND DATEPART(MINUTE, SyncDate) BETWEEN 0 AND 30 

para comprobar 14: 00-14: 30 horas.

+0

extraño. Estoy ejecutando 2008, reconoce 'tiempo' como palabra clave, pero dice que no es un 'tipo de sistema definido'. – ImGreg

+0

¿Está funcionando su servidor back-end 2008, o es solo su copia de SQL Server Mgmt Studio? Lo comprobé en 2008 R2 y debería funcionar bien ... –

+0

Tiene razón, solo el estudio. ¿El backend es la versión de MDAC o cómo lo compruebo? – ImGreg

2

¿Qué tal esto ....

select * from MyTable where 
cast(cast(datepart(HH,SyncDate) as char(2)) + cast(datepart(HH,SyncDate) as char(2)) as int) between 1400 and 1430 
+0

Tipo de método dudoso. Sin embargo, saca el molde como int y coloca apóstrofes alrededor del '1400' y realmente funciona. +1 para un enfoque innovador. – ImGreg

Cuestiones relacionadas