2008-08-22 17 views
1

Sie fragen sich, ob es einen besseren Grund in der WHERE-Klausel zum Auswählen von Datensätzen gibt, wenn Sie das effektive Start- und Enddatum betrachten müssen?Vergleichen von effektiven Daten in SQL

Derzeit so wie ich es in der Vergangenheit auf MS SQL Server gemacht habe. Nur besorgt über das Datum und nicht die Zeit. Ich bin mit 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)) 

Antwort

-1

versuchen

ep.EffectiveStartDate BETWEEN @date1 AND @date2 

, wo man so etwas wie

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

Das ist nicht einmal annähernd das, wonach er fragt. Wo ist 'EffektivEnddatum'? – ErikE

1

@Darren Kopp - Sie

set @date2 = '20201001' 

dieses Sie die Besetzung verlieren lassen können.

footndale - Sie können die Datumsarithmetik auch verwenden, um die Zeit zu entfernen. So etwas wie

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

heutigen Datum zu erhalten (ohne Zeit). Ich glaube, das ist effizienter als das Hin und Herwerfen.

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

Ich denke, Sie werden feststellen, dass diese Bedingungen die bestmögliche Leistung bieten. Dies wird glücklich Indizes verwenden.

Ich bin auch sehr sicher, dass dies richtig ist und die richtigen Daten geben wird. Eine weitere Berechnung von Daten ohne Zeitanteile ist nicht erforderlich.