SQL 服务器 'LIKE' 或 varchar 问题

SQL Server 'LIKE' or varchar issue

我有一个存储过程,它通过我传递给 varchar.

的字符串在列上搜索 table

这有效,returns 具有正确 ING_LOC_DESCRIPTION

的特定记录
DECLARE @strSearch VARCHAR(500)
SET @strSearch = 'Care1st LETTER Location'

SELECT TOP 10 ING_LOC_DESCRIPTION
FROM [CDRS].[ING_LOC_TRANS_MASTER]
WHERE [ING_LOC_DESCRIPTION] LIKE '%' + @strSearch + '%'
ORDER BY [ING_LOC_ID]

这不起作用 returns ING_LOC_ID 排序的所有记录的前十个结果:

DECLARE @strSearch VARCHAR(500)
SET @strSearch = '[{"WorkFlowID":"MoveFile"}]'

SELECT TOP 10 ING_LOC_DESCRIPTION
FROM [CDRS].[ING_LOC_TRANS_MASTER]
WHERE [ING_LOC_DESCRIPTION] LIKE '%' + @strSearch + '%'
ORDER BY [ING_LOC_ID]

这些字符 [ {, ", :, }, ] 在 varchar 中是否无效?是否被解释为 2 个字符串?还是 LIKE 有问题关键字?

字符串赋值似乎没问题,因为

DECLARE @strSearch VARCHAR(500)
SET @strSearch = '[{"WorkFlowID":"MoveFile"}]'

SELECT @strSearch

return秒

[{"WorkFlowID":"MoveFile"}]

不幸的是

DECLARE @strSearch VARCHAR(500)
SET @strSearch = '[{"WorkFlowID":"MoveFile"}]'

SELECT @strSearch LIKE '[{"WorkFlowID":"MoveFile"}]'

与我希望的 return 不一样,它 return 是一个错误

Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'LIKE'

我认为 LIKE 只能用在 WHERE 子句中,所以我不认为这证明使用 LIKE.

有问题

您需要转义特殊字符:

List of special characters for SQL LIKE clause

Pattern Matching with the ESCAPE Clause

是的。在 LIKE 中,[/] 限制字符 class。因此代码匹配任何包含 {"W 等的值。

我建议使用不同的方法:

SELECT TOP 10 ING_LOC_DESCRIPTION
FROM [CDRS].[ING_LOC_TRANS_MASTER]
WHERE CHARINDEX(@strSearch, ING_LOC_DESCRIPTION) > 0
ORDER BY [ING_LOC_ID];

简单字符串匹配中没有通配符。

[ ] 字符在 T-Sql 中具有特殊含义 LIKE - 它们用于模式搜索。

例如:WHERE column LIKE '[a-c]%' 将 return 所有 columnabc 开头的记录,而 WHERE column LIKE '[^a-c]%' 将 return 所有 Column 不以 abc.

开头的记录

您可以通过将 [ 字符包装在 [] 中来转义它:WHERE column LIKE '[[]a]%' 将 return 列以 [a] 开头的所有记录(不需要以转义右括号)。

有关详细信息,请阅读同一页面下方的 arguments of the like operator, and Using Wildcard Characters As Literals

Gordon 的回答可能是最简洁的方法,但这里有一个使用 ESCAPE:

的例子
SELECT TOP 10 ING_LOC_DESCRIPTION
FROM [CDRS].[ING_LOC_TRANS_MASTER]
WHERE [ING_LOC_DESCRIPTION] LIKE '%'+@strSearch+'%' ESCAPE '['

只需要对其中一个方括号进行转义,即可避免括号绑定一个字符class。