我在寻找的东西,在类似于SQL Server可以@
在C#中的象征符号,导致要采取一个字符串作为它的字面。 例如:
string text = "abcd\\efg";
Output of text = abcd\efg
string text = @"abcd\\efg";
Output of text = abcd\\efg
注意@如何影响字符串采取的每一个字符为是。
现在,我不知道这是可能的,但这里是我的问题,也许有解决这个更好的方法。 考虑以下基本查询:
SELECT [Name]
FROM [Test]
WHERE [Name] LIKE (@searchText + '%')
我的问题是,如果他们把%
, _
或任何其他的那些特殊字符,可以影响我喜欢条款。 我想比赛进行到行为就像一个“以”功能。 那么,有没有什么我可以适用于@searchText说采取这种字面上还是有possbibly一个更好的解决办法,我没有想到的?
编辑:我不想解决方案是客户端的清洁。 我需要这个存储过程,而不依赖于数据被清理传递工作。
要搜索“%”的文字不是通配符的字符串,它需要转义为[%]。
现在,SQL Server只需要3个字符转义:%_ [
因此,创建一个标量UDF来包装这个:
REPLACE(REPLACE(REPLACE(@myString, '[', '[[]'), '_', '[_]'), '%', '[%]')
因为简单的(又名:非常有限)模式匹配的SQL,需要什么更复杂的...
在TSQL,你可以用括号中的%和_字符,像这样[%] [_]这告诉SQL对待它们当作文字。
我已经测试和验证这个作品在SQL Server 7.0,2000年和2005年。
http://msdn.microsoft.com/en-us/library/aa933232(SQL.80).aspx
从字面上对待每个字符应放在方括号内。 右支架从字面上直接,所以不要附上一个。
如果参数查询,你不必担心。
UPDATE
正如评论指出递归%仍然需要即使在参数化查询进行转义,我没有意识到的LINQ to SQL被自动地做这件事时,我测试。
你可以用ESCAPE“X”,其中x是字符,你希望成为转义字符。 LINQ到SQL做它像这样
WHERE [名] LIKE @searchText ESCAPE '〜'
其中@searchText = [一些文本用〜%字符%]
或者正如其他人说,它可以被转义[%]
查看该文档
我消毒字符串中的前端应用程序,而不是在SQL尝试做做作的东西来解决这个问题。
从该文档 :
句法
MATCH_EXPRESSION [NOT] LIKE 模式 [ESCAPE ESCAPE_CHARACTER]
使用ESCAPE
像这样的选项:
SELECT [Name]
FROM [Test]
WHERE [Name] LIKE (REPLACE(@searchText, '%', '%%') + '%') ESCAPE '%'
如果你不希望修改传入的文本,您可以使用“LEFT”功能来创建自己的“STARTSWITH”:
SELECT [Name]
FROM [Test]
WHERE @searchText = LEFT( [Name], LEN( @searchText ) )
(请注意,你可能需要做额外的工作来处理空值或空字符串的情况。)
编辑:删除了有关使用“喜欢”搜索“%”不正确的说法。