我正在尝试使用类似的过滤器使用存储过程过滤项目.该列是varchar(15).我想要过滤的项目在名称中有方括号.
例如: WC[R]S123456.
如果我这样做LIKE 'WC[R]S123456',它将不会返回任何东西.
我找到了一些关于使用ESCAPE关键字的信息,LIKE但我不明白如何使用它来将方括号视为常规字符串.
如何在SQL Server的存储过程中转义字符串,以便在LIKE表达式中使用它是安全的.
假设我有一个NVARCHAR像这样的变量:
declare @myString NVARCHAR(100);
Run Code Online (Sandbox Code Playgroud)
我想在LIKE表达式中使用它:
... WHERE ... LIKE '%' + @myString + '%';
Run Code Online (Sandbox Code Playgroud)
如何在T-SQL中转义字符串(更具体地说,对LIKE模式匹配有意义的字符,例如%或?),以便以这种方式使用它是安全的?
例如,给定:
@myString = 'aa%bb'
Run Code Online (Sandbox Code Playgroud)
我想要:
WHERE ... LIKE '%' + @somehowEscapedMyString + '%'
Run Code Online (Sandbox Code Playgroud)
匹配'aa%bb','caa%bbc'但不是'aaxbb'或'caaxbb'.
我正在寻找在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来说明这一点,或者是否有可能是一个我没想到的更好的解决方案?
编辑:我不希望解决方案是客户端清理.我需要这个存储过程工作,而不依赖于被清理传递的数据.
我有一张包含产品的表格.我需要查询查找所有匹配结果到用户输入值.我SqlParameter用于插入输入.
SqlCommand findProcutsByPattern = new SqlCommand(
"SELECT *" +
" FROM [Products]" +
" WHERE ProductName LIKE @pattern", connection);
findProcutsByPattern.Parameters.AddWithValue("@pattern", '%' + pattern + '%');
Run Code Online (Sandbox Code Playgroud)
当用户输入字符串包含'_'或'%'时,问题就出现了,因为它们被解释为特殊字符.另一方面,考虑到这一点:
命令对象使用参数将值传递给SQL语句或存储过程,从而提供类型检查和验证.与命令文本不同,参数输入被视为文字值,而不是可执行代码.
我不应该有这样的问题.我是否需要替换/转义输入字符串中的所有'_'和'%',或者是否有更优雅的解决方案.我希望输入被视为文字.
我在表中有一些记录,其中包括名称中的特殊字符(N_EW,N\EW,N%EW,N"EW,N'EW).指定\,"和'作为输入工作正常(考虑它们)作为文字).