比较SQL中的有效日期

时间:2008-08-22 16:35:19

标签: sql sql-server date sql-server-2005

想知道当你需要查看有效的开始和结束日期时,在选择记录的WHERE子句中有更好的原因吗?

目前我是如何在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))

5 个答案:

答案 0 :(得分:1)

这太糟糕了,看看Only In A Database Can You Get 1000% + Improvement By Changing A Few Lines Of Code看看如何优化这个,因为这不是可以理解的

另请查看Get Datetime Without TimeQuery Optimizations With Dates

答案 1 :(得分:1)

@Darren Kopp - 您可以使用

set @date2 = '20201001'

这会让你输掉演员。

footndale - 您也可以使用日期算法来删除时间。像

这样的东西
select dateadd(d, datediff(d, 0, CURRENT_TIMESTAMP), 0)

获取今天的日期(没有时间)。我相信这比来回摆动更有效。

答案 2 :(得分:0)

@Darren Kopp

注意BETWEEN,请查看How Does Between Work With Dates In SQL Server?

答案 3 :(得分:0)

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

我认为您会发现这些条件可以提供最佳性能。这将很乐意利用索引。

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

答案 4 :(得分:-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)