一尘不染

在SQL Server中转义字符串,以便可以在LIKE表达式中安全使用

sql

如何在SQL Server的存储过程中转义字符串,以便可以在LIKE表达式中安全使用。

假设我有一个NVARCHAR像这样的变量:

declare @myString NVARCHAR(100);

我想在LIKE表达式中使用它:

... WHERE ... LIKE '%' + @myString + '%';

如何在T-SQL中转义字符串(更具体地说,是对LIKE模式匹配有意义的字符,例如%或?),以便可以安全地以这种方式使用?

例如,给定:

@myString = 'aa%bb'

我想:

WHERE ... LIKE '%' + @somehowEscapedMyString + '%'

匹配'aa%bb''caa%bbc'但没有'aaxbb''caaxbb'


阅读 196

收藏
2021-03-10

共1个答案

一尘不染

要在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变量分配更多的空间,因为随着字符串替换它会变长。

2021-03-10