【发布时间】:2014-07-18 05:24:28
【问题描述】:
... 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 子句中的时间组件,查询执行时间为 6 分钟 - 此方法依赖于静态表,因此我决定不再使用该方法。使用 DATEADD 和 DATEDIFF 组合,我的查询在 40 分钟后仍在运行。
这是 SQL Server 2005 和 2008 中的一个已知问题,根据: MSDN Blog Article
由于这是一个视图,我如何预先计算 FROM 和 TO 日期并传递实际值以减少查询执行期间的传递次数?
【问题讨论】:
-
在 SQL Server 2008 上,您可以使用
CAST(YourColumn AS DATE)来“删除”时间部分 - 如果您不需要时间,也可以使用DATE数据类型! -
运行 SELECT DATEADD(MONTH, Datediff(Day, 0, GetDate() -12), 0) 给我一个日期“5385-05-01 00:00:00.000”。也许这就是问题所在?
-
副本中接受的答案有另一种表达方式(或跟踪标志的详细信息),可以避免问题。
标签: sql sql-server sql-server-2008 sql-server-2005