[英]Comparing effective dates in SQL
想知道为什么在需要查看有效的开始日期和结束日期的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))
太糟糕了,看看“ 仅在数据库中您可以通过更改几行代码来获得1000%+的改进”,以了解如何优化此代码 ,因为这是不可靠的
还要签出不带时间的获取日期时间和带日期的查询优化
@Darren Kopp-您可以使用
set @date2 = '20201001'
这会让你失去演员。
footndale-您也可以使用日期算术删除时间。 就像是
select dateadd(d, datediff(d, 0, CURRENT_TIMESTAMP), 0)
获取今天的日期(无时间)。 我相信这比来回转换更有效。
@达伦·科普
注意BETWEEN,请查看SQL Server之间的日期之间如何工作?
AND DateDiff(Day, 0, GetDate()) + 1 > ep.EffectiveStartDate
AND DateDiff(Day, 0, GetDate()) < ep.EffectiveEndDate
我认为您会发现这些条件可以提供最佳性能。 这将愉快地利用索引。
我也非常确定这是正确的,并将提供正确的数据。 没有时间部分的日期无需进一步计算。
尝试
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.