bms*_*dev 4 sql t-sql sql-server stored-procedures sql-server-2012
我在下面query的一个用过stored procedures
SELECT officeid, rdate
FROM dbo.mytable
Where OfficeID = OfficeID
AND YEAR(h.rDate) = @year
AND MONTH(h.rDate) BETWEEN 1 AND 4
Run Code Online (Sandbox Code Playgroud)
上述查询无法成为SARG ( Search Argument)由于功能的使用MONTH而YEAR导致的Where clause.这导致执行Index scan期间stored procedure.有没有办法重写上面的查询来处理上述逻辑(没有function)
(PS: rdate是datetimedatetype,@year是INT数据类型)
使用伪值..
以下功能是SARGABLE(但会很长),因为,所以将使用索引. CAST( DATETIME to DATE) is SARAGABLE
例:
Cast(h.rDate as DATE)
between datefromparts(@year,01,01)
and datefromparts(@year,04,30)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |