2008-08-22 70 views
1

想知道當您需要查看有效的開始日期和結束日期時,在選擇記錄的WHERE子句中是否有更好的理由?在SQL中比較生效日期

目前這是我過去在MS SQL Server上完成的。只是擔心日期而不是時間。我使用的是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)) 

回答

-1

嘗試

ep.EffectiveStartDate BETWEEN @date1 AND @date2 

,你會做這樣的事情

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

這甚至不是他所要求的。 `EffectiveEndDate`在哪裏? – ErikE 2011-01-25 22:16:22

1

@Darren柯普 - 您可以使用

set @date2 = '20201001' 

這會讓你失去的演員。

footndale - 您也可以使用日期算法來消除時間。類似於

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

得到今天的日期(沒有時間)。我相信這比來回投擲更有效率。

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

我想你會發現這些條件提供了儘可能最佳的性能。這將愉快地利用指標。

我也非常確定這是正確的,並會提供正確的數據。不需要進一步計算沒有時間部分的日期。