2010-06-08 28 views
9

Tengo un campo smalldatetime llamado myTime grabando cuando se creó el registro. Necesito la sintaxis que selecciona los registros creados en la última hora.Buscar registros producidos en la última hora

pensaron que sería:

and DATEDIFF("hh", datePart(hh, myTime), DatePart(hh, GETDATE()) < 1 

donde datediff

  1. mira durante horas
  2. mira a la parte de horas de los datos en myTime como iniciar
  3. mira a la porción horas de ahora para terminar
  4. produce un int que se compara con ' 1 '

los resultados que obtengo están claramente muy, muy lejos, pero no sé por qué.

ADDENDUM: Dado que ambas respuestas esencialmente coinciden, el hecho de que esto no me devuelva nada debe estar relacionado con la forma en que se creó mi tabla. Es creado por LogParser trabajando contra los registros de IIS y tiene información de fecha/hora distribuida en 2 campos diferentes. Date contiene solo la información de fecha a la que se parecen los registros de hoy: 2010-06-08 00:00:00.000 y el campo Hora se ve así: 2010-01-01 15:02:51.000 (la porción de fecha para todos los registros es 01/01).

Respuesta

25

Utilice esta:

SELECT * 
FROM Whatever 
WHERE myTime > DATEADD(HOUR, -1, GETDATE()) 
+1

6 segundos delante de mí, y con bloques de código para arrancar! +1 –

2

uso SELECT * FROM YourTable DONDE YourDateTime> = DATEADD (hh, -1, GETDATE())

2

Si desea horas enteras utilizan la siguiente ...

--This Hour 
SELECT * 
FROM Whatever 
WHERE myTime >= dateadd(hour, datediff(hour, 0, GETDATE()), 0) 

--Last Hour 
SELECT * 
FROM Whatever 
WHERE myTime < dateadd(hour, datediff(hour, 0, GETDATE()), 0) AND myTime >= dateadd(hour, datediff(hour, 0, DATEADD(HOUR, -1, GETDATE())), 0) 

--Hour before last 
SELECT * 
FROM Whatever 
WHERE myTime < dateadd(hour, datediff(hour, 0, DATEADD(HOUR, -1, GETDATE())), 0) AND myTime >= dateadd(hour, datediff(hour, 0, DATEADD(HOUR, -2, GETDATE())), 0) 
0

Aunque este WHERE myTime > DATEADD(HOUR, -1, GETDATE()) debería haber trabajado para mí, por alguna extraña razón el feild de fecha y hora en mi servidor SQL está configurado de una manera extraña, donde el código anterior volvería todo el día, no jus t la hora anterior a Ahora. Después de algunos ajustes encontré que GETDATE() era en realidad 7 horas antes de la hora actual por lo que mi consulta es el siguiente:

WHERE myTime BETWEEN DATEADD(HH, 6, GETDATE()) AND DATEADD(HH, 7, GETDATE()) 

Así DATEADD (HH, 7, GETDATE() es ahora más 7 horas (que viene siendo la hora actual de acuerdo con el db). Y luego restar una hora para obtener todas las filas dentro de ese bloque de horas. Pensé que debería publicar esto solo para ayudar a cualquiera a tener el mismo problema.

+0

es mejor que haya observado qué servidor estaba almacenando las fechas y comparando su configuración de zona horaria con el servidor de base de datos. Su código es frágil porque depende de que un servidor esté configurado para una zona horaria diferente que el o El r. – NotMe

Cuestiones relacionadas