私は次の声明を与えられました:
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の数字をDealNumberと比較することです。DNumberとDealNumberは、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"
しかし、実行するとコードがタイムアウトし続けます。