gpt4 book ai didi

sql - 从 Sql 服务器中的 where 子句中排除函数

转载 作者:行者123 更新时间:2023-12-03 02:16:09 25 4
gpt4 key购买 nike

我在我的一个存储过程中使用了以下查询

SELECT officeid, rdate
FROM dbo.mytable
Where OfficeID = OfficeID
AND YEAR(h.rDate) = @year
AND MONTH(h.rDate) BETWEEN 1 AND 4

由于 Where 中使用了函数 MONTHYEAR,上述查询无法成为 SARG(搜索参数)子句。这会在存储过程执行期间导致索引扫描。有没有办法重写上面的查询来处理上面的逻辑(没有function)

(P.S:rdatedatetime日期类型,@yearINT数据类型)

最佳答案

使用伪值..

下面的函数是 SARGABLE(但会很长),因为 CAST( DATETIME to DATE) is SARAGABLE ,所以会使用索引。

示例:

Cast(h.rDate as DATE) 
between datefromparts(@year,01,01)
and datefromparts(@year,04,30)

关于sql - 从 Sql 服务器中的 where 子句中排除函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38353213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com