慢执行 - WHERE子句中的DateAdd和DateDiff

时间:2014-07-18 05:24:29

标签: sql sql-server sql-server-2008 sql-server-2005

... AND (Orders.ShipDate >= DATEADD(MONTH, Datediff(MONTH, 0, GetDate()) -12), 0)
    AND Orders.ShipDate < DATEADD(MONTH, Datediff(MONTH, 0, GetDate()), 0)

我最初使用

CAST(FLOOR(CAST .....

删除where子句中的time组件,查询执行时间为6min - 这个方法依赖于静态表,所以我决定放弃它。使用DATEADDDATEDIFF组合,我的查询仍然在40分钟后运行。

根据以下内容,这是SQL Server 2005和2008中的已知问题: MSDN Blog Article

由于这是一个视图,如何预先计算FROMTO日期并传递实际值以减少查询执行期间的传递次数?

1 个答案:

答案 0 :(得分:1)

你计算&#34;第0天和第34天之间的日子。现在,但增加了MONTHS的数量。你可能想纠正这个......否则它看起来很好(只是)给我。