如何在SQL Server的存储过程中转义字符串,以便可以在LIKE表达式中安全使用。
假设我有一个NVARCHAR像这样的变量:
NVARCHAR
declare @myString NVARCHAR(100);
我想在LIKE表达式中使用它:
... WHERE ... LIKE '%' + @myString + '%';
如何在T-SQL中转义字符串(更具体地说,是对LIKE模式匹配有意义的字符,例如%或?),以便可以安全地以这种方式使用?
例如,给定:
@myString = 'aa%bb'
我想:
WHERE ... LIKE '%' + @somehowEscapedMyString + '%'
匹配'aa%bb','caa%bbc'但没有'aaxbb'或'caaxbb'。
'aa%bb'
'caa%bbc'
'aaxbb'
'caaxbb'
要在LIKE表达式中转义特殊字符,请在其前面加上转义字符。您可以选择与ESCAPE关键字一起使用的转义字符。(MSDN参考)
例如,使用\作为转义字符,可以转义%符号:
select * from table where myfield like '%15\% off%' ESCAPE '\'
如果您不知道字符串中将包含哪些字符,并且不想将其视为通配符,则可以在所有通配符前面加上转义字符,例如:
set @myString = replace( replace( replace( replace( @myString , '\', '\\' ) , '%', '\%' ) , '_', '\_' ) , '[', '\[' )
(请注意,您也必须转义转义字符,并确保这是内部字符,replace以免转义从其他replace语句添加的转义字符)。然后,您可以使用如下所示的内容:
select * from table where myfield like '%' + @myString + '%' ESCAPE '\'
还要记住为@myString变量分配更多的空间,因为随着字符串替换它会变长。