2010-06-08 12 views
9

Ho un campodenominato myTime durante la registrazione del record. Ho bisogno della sintassi che seleziona i record creati nell'ultima ora.Trova record prodotti nell'ultima ora

pensato che sarebbe stato:

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

dove datediff

  1. guarda per ore
  2. guarda alla parte ora dei dati in myTime come punto di partenza
  3. guarda alla porzione di ore di ora per finire
  4. produce un int che viene confrontato a ' 1 '

i risultati che sto ottenendo sono chiaramente molto, molto lontani, ma non so perché.

ADDENDUM: Poiché entrambe le risposte sono sostanzialmente d'accordo, il fatto che questo non restituisca nulla per me deve tracciare il modo in cui il mio tavolo è stato creato. È stato creato da LogParser che funziona contro i registri IIS e ha informazioni su data/ora distribuite su 2 campi diversi. Date contiene solo le informazioni sulla data in cui appaiono tutti i record di oggi: 2010-06-08 00:00:00.000 e il campo Ora è simile a: 2010-01-01 15:02:51.000 (la parte di data per tutti i record è 01 gennaio di 01).

risposta

25

Utilizzare questa:

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

6 secondi prima di me, e con blocchi di codice per l'avvio! +1 –

2

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

2

Se volete ore intere utilizzare il seguente ...

--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

Anche se questo WHERE myTime > DATEADD(HOUR, -1, GETDATE()) dovrebbe hanno lavorato per me, per qualche strana ragione feild datetime nel mio server SQL è configurato in modo strano in cui il codice di cui sopra sarebbe tornato tutto il giorno, non jus t l'ora prima di Now. Dopo un po 'di risoluzione dei problemi ho scoperto che GETDATE() era in realtà 7 ore avanti rispetto all'ora corrente così la mia domanda è simile al seguente:

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

Così DATEADD (HH, 7, GETDATE() è ora più 7 ore (che viene fuori è l'ora corrente secondo il db) e poi sottrarre un'ora per ottenere tutte le righe entro quel blocco di un'ora.Pensavo che avrei dovuto postare questo per aiutare chiunque avesse lo stesso problema.

+0

si potrebbe essere meglio guardare a quale server stava memorizzando le date e confrontando la sua configurazione del fuso orario con il server di database.Il tuo codice è fragile perché dipende da un server in fase di installazione per un diverso fuso orario rispetto alla o ther. – NotMe

Problemi correlati