2017-10-04 1 views
0

Je travaille avec une application (système EHR) et doit apporter des enregistrements dans la plage de dates spécifique dans l'enregistrement SSRS. Dans le script, je formate la variable de date et s'applique à la colonne.SQL Server: BETWEEN DATES apporte des enregistrements en dehors de la période

Convert(varchar(10), @begdt, 101) + ' 00:00:00' and 
Convert(varchar(10), @enddt, 101) + ' 23:59:59' 

Si je mets le début et la date de fin de 01/01/2017 et 31/01/2017, il tire les enregistrements qui sont associés à 01/02/2017. Est-ce que quelqu'un peut m'aider avec ça?

+1

Pourquoi vous convertissez 'datetime' en chaînes pour la comparaison? [Mauvaises habitudes à lancer: mauvaise gestion de la date/gamme requêtes - Aaron Bertrand] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date- range-queries.aspx) [Qu'est-ce que "entre" et le diable ont en commun? - Aaron Bertrand] (http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx) – SqlZim

Répondre

0

Ne convertissez pas les dates en chaînes. Lorsque vous le faites, vous permettez à SQL Server de les comparer par ordre alphabétique plutôt que dans l'ordre des dates.

0

Ne pas utiliser entre, et définissez vos différents formats de date:

@begdt = '20170101' 
@enddt = '20170131' 

WHERE column1 >= @begdt AND column2 < @enddt 

Cela va prendre soin de votre problème datetime