我得到了以下声明:
LEFT(f.field4, CASE WHEN PATINDEX('%[^0-9]%',f.field4) = 0 THEN LEN(f.field4) ELSE PATINDEX('%[^0-9]%',f.field4) - 1 END)=@DealNumber
并且在联系写它的人时遇到了麻烦。有人可以解释该语句的作用,以及它是否是有效的 SQL 吗?该语句的目标是将 f.field for 中的数字字符与 DealNumber 进行比较。除了 DealNumber 末尾的通配符之外,DNumber 和 DealNumber 相同。
我试图在以下语句的上下文中使用它:
SELECT d.Description, d.FileID, d.DateFiled, u.Contact AS UserFiledName, d.Pages, d.Notes
FROM Documents AS d
LEFT JOIN Files AS f ON d.FileID=f.FileID
LEFT JOIN Users AS u ON d.UserFiled=u.UserID
WHERE SUBSTRING(f.Field8, 2, 1) = @LocationIDString
AND f.field4=@DNumber OR LEFT(f.field4, CASE WHEN PATINDEX('%[^0-9]%',f.field4) = 0 THEN LEN(f.field4) ELSE PATINDEX('%[^0-9]%',f.field4) - 1 END)=@DealNumber"
但是当我执行它时,我的代码会一直超时。