2008-08-22 19 views
1

Vous vous demandez s'il existe une meilleure raison dans la clause WHERE de choisir des enregistrements lorsque vous devez rechercher des dates de début et de fin efficaces?Comparaison des dates d'entrée en vigueur dans SQL

Actuellement, voici comment je l'ai fait dans le passé sur MS SQL Server. Juste inquiet pour la date et non l'heure. J'utilise SQL Server 2005.

AND Convert(datetime, Convert(char(10), ep.EffectiveStartDate, 101)) 
    <= Convert(datetime, Convert(char(10), GetDate(), 101)) 
AND Convert(datetime, Convert(char(10), ep.EffectiveEndDate, 101)) 
    >= Convert(datetime, Convert(char(10), GetDate(), 101)) 

Répondre

-1

essayer

ep.EffectiveStartDate BETWEEN @date1 AND @date2 

où vous feriez quelque chose comme

declare @date1 datetime, @date2 datetime; 
set @date1 = cast('10/1/2000' as datetime) 
set @date2 = cast('10/1/2020' as datetime) 
+0

Ce n'est même pas proche de ce qu'il demande. Où est 'EffectiveEndDate'? – ErikE

1

@Darren Kopp - vous pouvez utiliser

set @date2 = '20201001' 

cela vous permettra de perdre le casting. Footndale - vous pouvez également utiliser l'arithmétique de la date pour supprimer l'heure. Quelque chose comme

select dateadd(d, datediff(d, 0, CURRENT_TIMESTAMP), 0) 

pour obtenir la date du jour (sans le temps). Je crois que c'est plus efficace que de faire des allers-retours.

0
AND DateDiff(Day, 0, GetDate()) + 1 > ep.EffectiveStartDate 
AND DateDiff(Day, 0, GetDate()) < ep.EffectiveEndDate 

Je pense que vous constaterez que ces conditions offrent les meilleures performances possibles. Cela va heureusement utiliser les index.

Je suis également très sûr que c'est juste et donnera les bonnes données. Aucun autre calcul de dates sans portions de temps n'est nécessaire.