2011-12-12 19 views
10

Sto tentando di eseguire una query tra 2 date. Mi piacerebbe farlo senza dovermi preoccupare del tempo. Quando un utente inserisce le 2 date in cui desidera effettuare la ricerca, non vi è alcuna selezione per il tempo. Ciò significa che le date in cui entrano sono predefinite alle 12:00 AM.TSQL: Data BET query - Ignoring Time

Le date nella tabella hanno tuttavia delle ore. Vorrei solo ignorare i tempi tutti insieme in modo che la ricerca porti indietro tutti i record di detto intervallo di date.

Ecco il mio SQL:

TheDate BETWEEN @EnteredBeginDate AND @EnteredEndDate 

Così, quando un utente effettua una ricerca range compreso tra 8/6/2009 e 9/9/2009 Voglio restituire i record:

8/6/2009 11:33:02 AM 
8/6/2009 11:39:17 AM 
9/9/2009 8:21:30 AM 

Quello che sta accadendo ora è che torno solo:

8/6/2009 11:33:02 AM 
8/6/2009 11:39:17 AM 

Qualcuno può consigliare il modo migliore per farlo in SQL? So come farlo in C#.

+0

Cosa ** ** versione di SQL Server ?? –

risposta

10

Basta utilizzare DATEADD per l'enddate di impostare a mezzanotte del giorno dopo ...

TheDate BETWEEN @EnteredBeginDate AND DATEADD(day, 1, @EnteredEndDate)

Se vuoi essere davvero precisi, si potrebbe sottrarre un secondo o millisecondo da che per rendere 11:59:59 sul vostro data specificata:

TheDate BETWEEN @EnteredBeginDate AND DATEADD(second, -1, (DATEADD(day, 1, @EnteredEndDate)))

+0

Questa sarà la mia risposta scelta. +1 per l'opzione precisa. Grazie a tutti! – Jared

1
TheDate BETWEEN @EnteredBeginDate AND dateadd(day, 1, @EnteredEndDate) 
+3

Se inserisci codice, XML o campioni di dati, ** PLEASE ** evidenzia queste righe nell'editor di testo e fai clic sul pulsante "esempi di codice" ('{}') sulla barra degli strumenti dell'editor per formattarlo in modo appropriato e evidenziare la sintassi! –

7

Se siete su SQL Server o 2008 R2, è possibile utilizzare il nuovo DATE tipo di dato:

TheDate BETWEEN CAST(@EnteredBeginDate AS DATE) AND CAST(@EnteredEndDate AS DATE) 

Che toglie la parte di tempo e guarda solo alla data

+0

Questo è fantastico. Devo usare il 2005 però. – Jared

0

Se solo è passata la data in SQL Server, farà il tempo 12:00 AM. Pertanto, la data di fine della clausola between è 9/9/2009 12:00 AM. Basta aggiungere un giorno o modificare la data passata nella query per includere l'ora corretta.

3

Se si utilizza SQL Server 2008, quindi fare questo:

TheDate BETWEEN cast(@EnteredBeginDate as date) AND cast(@EnteredEndDate as date)