繁体   English   中英

比较SQL中的生效日期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM