如何转义字符串以便与SQL Server中的LIKE运算符一起使用?

Kel*_*sey 13 sql t-sql sql-server pattern-matching

我正在寻找在SQL Server中工作的类似于@c#中的符号的东西,这会导致字符串被视为文字.例如:

string text = "abcd\\efg";
Output of text = abcd\efg

string text = @"abcd\\efg";
Output of text = abcd\\efg
Run Code Online (Sandbox Code Playgroud)

注意@如何影响字符串以按字符顺序获取每个字符.

现在我不确定这是可能的,但这是我的问题,也许有更好的方法来解决这个问题.请考虑以下基本查询:

SELECT [Name] 
  FROM [Test] 
 WHERE [Name] LIKE (@searchText + '%')
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果他们把一个%,_或任何其他的那些特殊字符,可以影响我喜欢条款.我希望这场比赛就像一个'开始'功能.那么有什么我可以应用于@searchText来说明这一点,或者是否有可能是一个我没想到的更好的解决方案?

编辑:我不希望解决方案是客户端清理.我需要这个存储过程工作,而不依赖于被清理传递的数据.

gbn*_*gbn 20

要在字符串中搜索"%"作为文字而不是通配符,它​​需要以[%]的形式进行转义.

现在,SQL Server只需要3个字符转义:%_ [

所以,创建一个标量udf来包装它:

REPLACE(REPLACE(REPLACE(@myString, '[', '[[]'), '_', '[_]'), '%', '[%]')
Run Code Online (Sandbox Code Playgroud)

由于SQL中的简单(又名:非常有限)模式匹配,不需要更复杂的...


Nei*_*l N 9

在TSQL中,您可以将%和_字符包装在括号中,如此[%] [_]这会告诉SQL将它们视为文字.

我已在SQL Server 7.0,2000和2005中测试并验证了这项工作.

http://msdn.microsoft.com/en-us/library/aa933232(SQL.80).aspx