在视图中有效使用当前日期

时间:2015-09-17 09:49:34

标签: sql tsql date

我有一个需要显示过去60天数据的视图。目前我写了:

WHERE (TNP.ATimeWindowEnd > '2015-07-18 00:00:00') AND (TNP.ATimeWindowEnd < '2015-09-16 00:00:00')

但是每次尝试使用DateAdd(Day, Datediff(Day,0, GetDate() -1), 0)(和-61)代替静态日期时,为了不手动编辑它。这有效,但减慢了查询的性能,使得视图不切实际。然后我将日期函数移动到变量:

SET @ToDate = DateAdd(Day, Datediff(Day,0, GetDate() -1), 0)

这提高了查询的速度(我怀疑它只运行一次而不是每行一次)但现在我不能在视图中使用它,因为我无法将局部变量添加到视图中。关于如何在不影响性能的情况下将动态日期纳入视图的任何想法?

2 个答案:

答案 0 :(得分:2)

您可以在视图中使用以下内容吗?请检查。

WHERE TNP.ATimeWindowEnd > DATEADD(day, -60, CURRENT_TIMESTAMP)

修改:将<替换为>

答案 1 :(得分:0)

如果您在TNP(ATimeWindowEnd)上有索引,则使用函数可以更改索引使用情况。 SQL Server通常不支持在函数上使用索引,因此您可以使用:

WHERE TNP.ATimeWindowEnd >= CAST(DATEADD(day, -60, CURRENT_TIMESTAMP) as DATE)

所有计算都在CURRENT_TIMESTAMP完成。时间组件由CAST()删除。

如果您使用的是旧版本的SQL Server,则需要使用DATEADD()技巧删除时间组件。