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
是的。在 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 所有 column
以 a
、b
或 c
开头的记录,而 WHERE column LIKE '[^a-c]%'
将 return 所有 Column
不以 a
、b
或 c
.
开头的记录
您可以通过将 [
字符包装在 []
中来转义它: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。
我有一个存储过程,它通过我传递给 varchar
.
这有效,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
是的。在 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 所有 column
以 a
、b
或 c
开头的记录,而 WHERE column LIKE '[^a-c]%'
将 return 所有 Column
不以 a
、b
或 c
.
您可以通过将 [
字符包装在 []
中来转义它: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。