2011-09-28 19 views
14

Estoy buscando una decisión óptima de cómo obtener los valores de la tabla de acuerdo con su fecha y hora, pero en solo UNA hora pasada.T-SQL (fecha): ¿cómo obtener valor en una hora?

me refiero a algo de esta manera (un pseudocódigo):

SELECT value FROM Table WHERE date BETWEEN getdate() AND getdate()-ONE_HOUR 

Para el propósito de esta pregunta Table tiene estas columnas:

  • value
  • date

Cualquier fragmento útil es apreciado :)

+0

Por regla general, lo mejor es invocar GetDate() una vez y guardar el valor de una variable, a continuación, utilizar la variable, según sea necesario. Evita todo tipo de maldades alrededor de la medianoche. – HABO

Respuesta

22
SELECT Value 
FROM Table 
WHERE Date between dateadd(hour, -1, getdate()) and getdate() 

Descripción de la función DATEADD:

DATEADD (datepart , number , date) 

Devuelve una fecha especificada con el intervalo de número especificado (entero con signo) se añadió a una datepart especificado de esa fecha.

datepart  Abbreviations 
----------- ------------- 
year   yy, yyyy 
quarter  qq, q 
month  mm, m 
dayofyear dy, y 
day   dd, d 
week   wk, ww 
weekday  dw, w 
hour   hh 
minute  mi, n 
second  ss, s 
millisecond ms 
microsecond mcs 
nanosecond ns 

Más información:

+0

Es interesante. Gracias. ¿Y qué pasa si uso const como -3 en esta función? ¿Me dará las últimas 3 horas valor de resultado entonces? – user592704

+0

Afirmativo. El valor numérico (parámetro 2) se agrega a (o con un valor negativo, restado) del valor de la fecha (parámetro 3). Si usó el día en lugar de la hora, restaría 1 (en mi ejemplo) días en lugar de 1 hora, y un -3 lo haría restar 3 días. –

2

Algo como esto debería funcionar.

SELECT value 
FROM Table 
WHERE date >= dateadd(hour,-1,getdate()) 
    and date <= getdate() 
+0

Tienes razón. Cambié la consulta ahora. – Gabe

+0

Comentario retrazado. No estoy seguro si> = y <= o entre ellos es más eficiente ... algún día tendré que probar. –

+3

@TheEvilGreebo - No hay diferencia alguna vez. El predicado aparecerá como '> =' y '<=' en el plan de todos modos. –

Cuestiones relacionadas