1

想知道当您需要查看有效的开始日期和结束日期时,在选择记录的 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))
4

5 回答 5

1

太糟糕了,看看只有在数据库中你可以通过更改几行代码来获得 1000% + 改进,看看如何优化它,因为那是不可预测的

另请查看Get Datetime without TimeQuery Optimizations With Dates

于 2008-08-22T16:39:21.327 回答
1

@Darren Kopp - 你可以使用

set @date2 = '20201001'

这会让你失去演员表。

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

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

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

于 2008-08-22T16:42:30.787 回答
0

@达伦·科普

请注意 BETWEEN,查看SQL Server 中的日期之间如何工作?

于 2008-08-22T16:40:49.187 回答
0
AND DateDiff(Day, 0, GetDate()) + 1 > ep.EffectiveStartDate
AND DateDiff(Day, 0, GetDate()) < ep.EffectiveEndDate

我想您会发现这些条件提供了可能的最佳性能。这将愉快地利用索引。

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

于 2011-01-25T22:15:21.113 回答
-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)
于 2008-08-22T16:36:33.313 回答