2011-12-12 5 views
10

J'essaie de faire une requête entre 2 dates. Je voudrais le faire sans avoir à m'inquiéter de l'heure. Lorsqu'un utilisateur saisit les 2 dates sur lesquelles il souhaite effectuer une recherche, il n'y a pas de sélection pour l'heure. Cela signifie que les dates qu'ils saisissent par défaut à 12:00 AM.TSQL: Date BETWEEN Query - Ignoring Time

Les dates dans le tableau ont cependant des dates. Je voudrais simplement ignorer les temps tous ensemble afin que la recherche ramène tous les enregistrements de cette plage de dates.

Voici mon SQL:

TheDate BETWEEN @EnteredBeginDate AND @EnteredEndDate 

Ainsi, lorsqu'un utilisateur effectue une recherche de plage entre 8/6/2009 et 9/9/2009 Je veux retourner les:

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

Qu'est-ce qui se passe maintenant, je suis seulement de retour:

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

Quelqu'un peut-il s'il vous plaît recommander la meilleure façon de le faire dans SQL? Je sais comment le faire en C#.

+0

Qu'est-ce que la version ** ** de SQL Server ?? –

Répondre

10

Il suffit d'utiliser DATEADD pour le enddate pour le mettre à minuit le jour suivant ...

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

Si vous voulez être vraiment précis, vous pouvez soustraire une seconde ou milliseconde de que pour le rendre 11:59:59 sur votre date spécifiée:

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

+0

Ce sera ma réponse choisie. +1 pour l'option précise. Merci tout le monde! – Jared

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

Si vous postez du code, XML ou des échantillons de données, ** METTEZ SVP ** en surbrillance dans l'éditeur de texte et cliquez sur le bouton "code samples" dans la barre d'outils de l'éditeur pour le mettre en valeur! –

7

Si vous êtes sur SQL Server ou 2008 R2, vous pouvez utiliser le nouveau DATE type de données:

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

Ce dénude la partie de temps et ne regarde que la date

+0

C'est génial. Je dois utiliser 2005 cependant. – Jared

0

Si seulement la date est passée dans SQL Server, il fera l'heure 00:00. Ainsi, la date de fin sur la clause between est 9/9/2009 12:00 AM. Ajoutez simplement un jour ou modifiez la date passée dans la requête pour inclure l'heure correcte.

3

Si vous utilisez SQL Server 2008, puis procédez comme suit:

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