【发布时间】:2018-05-06 07:55:37
【问题描述】:
SQL 服务器查询中的 LIKE 运算符对于匹配自定义模式非常有用。然而,有时需要从模式中转义一些字符或子字符串,例如和号'%'、下划线'_'、方括号'['和']'等。
确实,我正在使用 parametrized queries,但它不能解决 LIKE 情况,因为例如搜索 _ 将意味着“任何字符”。
在转义此类模式时必须考虑的字符集是什么?是否可以提供 C# 函数来执行安全转义?
【问题讨论】:
-
这个问题似乎没有解决同样的问题:我想要一整套字符来转义....
-
“一组双引号”不是字符。在任何情况下,双引号都不需要转义。单引号可以,但是出现一次还是多次都不会影响它的转义方式,每次都是一样的。
-
@Starnutoditopo 为什么?您不应该在 LIKE 谓词的参数中转义字符串 - 您应该将它们作为正确的参数传递。然后,您避免任何需要转义并且您也倾向于避免 SQL 注入漏洞。
-
@AaronBertrand:
LIKE转义与值转义明显不同,不能仅通过参数传递来解决。DECLARE @p VARCHAR(10) = '[[]]'; SELECT 1 WHERE ']' LIKE @p不会返回任何内容;至少你需要像DECLARE @p VARCHAR(10) = '[\[\]]'; SELECT 1 WHERE ']' LIKE @p ESCAPE '\'这样的东西,即使参数是参数化的。
标签: c# sql-server sql-parametrized-query