想知道当你需要查看有效的开始和结束日期时,在选择记录的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))
答案 0 :(得分:1)
这太糟糕了,看看Only In A Database Can You Get 1000% + Improvement By Changing A Few Lines Of Code看看如何优化这个,因为这不是可以理解的
另请查看Get Datetime Without Time和Query 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)