如何转义 SQL Server 存储过程中的字符串,以便在 LIKE
表达式中安全使用。
假设我有一个 NVARCHAR
变量,如下所示:
declare @myString NVARCHAR(100);
我想在 LIKE
表达式中使用它:
... WHERE ... LIKE '%' + @myString + '%';
如何转义 T 中的字符串(更具体地说,对 LIKE
模式匹配有意义的字符,例如 %
或 ?
) -SQL,这样使用就安全了吗?
例如,给定:
@myString = 'aa%bb'
我想要:
WHERE ... LIKE '%' + @somehowEscapedMyString + '%'
匹配'aa%bb'
、'caa%bbc'
,但不匹配'aaxbb'
或'caaxbb'
.
最佳答案
要转义 LIKE 表达式中的特殊字符,请在它们前面加上转义字符。您可以选择与 ESCAPE 关键字一起使用哪个转义字符。 (MSDN Ref)
例如,使用\作为转义字符来转义 % 符号:
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 变量分配更多空间,因为字符串替换后它会变得更长。
关于sql-server - 在 SQL Server 中转义字符串,以便在 LIKE 表达式中安全使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/258757/