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

标签 sql sql-server tsql pattern-matching

我正在寻找在 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 + '%')

我的问题是,他们是否放置了 %_ 或任何其他可能影响我的 like 子句的特殊字符。我希望匹配的行为就像“开头为”功能一样。那么有什么我可以应用到 @searchText 来表示按字面意思理解,或者是否有一个我没有想到的更好的解决方案?

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

最佳答案

要在字符串中搜索“%”作为文字而不是通配符,需要将其转义为 [%]。

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

因此,创建一个标量 udf 来包装它:

REPLACE(REPLACE(REPLACE(@myString, '[', '[[]'), '_', '[_]'), '%', '[%]')

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

关于sql - 如何转义字符串以与 SQL Server 中的 LIKE 运算符一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1428197/

相关文章:

sql - 在 SQL Server 中从整数转换为二进制并返回

mysql - SQL MIN 无法正常工作

phpmyadmin,如何更新表,字段支持用aql语句进行全文搜索?

sql - 在列的子集上选择不同的和分组依据

sql - 操作数类型冲突 : uniqueidentifier is incompatible with int

sql - 查找开始日期早于前一个结束日期的所有行

SQL,查找另一个表中不存在的所有条目

asp.net - .Net ADO 连接类

sql - 从依赖表中删除数据

c# - 将 List<> 传递给 SQL 存储过程