2008-08-22 73 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 

我想你会发现这些条件提供了尽可能最佳的性能。这将愉快地利用指标。

我也非常确定这是正确的,并会提供正确的数据。不需要进一步计算没有时间部分的日期。