当前位置: 首页 > 面试题库 >

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

史涵育
2023-03-14
问题内容

我正在寻找可以在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上的字面意思吗?或者是否有我没有想到的更好的解决方案?

编辑: 我不希望解决方案是客户端清洗。我需要此存储的proc来工作,而不依赖于清除中传递的数据。


问题答案:

要以字符串形式而不是通配符的形式搜索“%”,需要以[%]进行转义。

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

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

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

由于SQL中的模式匹配非常简单(又名:非常有限),因此无需再复杂…



 类似资料:
  • 9.2.3 字符转义运算符 在引用宏时,如果实参中含有特殊字符,而又要该特殊字符当作普通字符来出来,那么,就必须在该特殊字符前加上字符转义运算符“!”。 下面不使用和使用字符转义运算符的宏引用语句及其宏扩展的结果: DEFMSG <Input one number(>90):> 1DB 'Input one number(90):', 0DH, 0AH, '$'  ;第一个“>”与字符“<”相比配

  • 问题内容: 当然,在使用MySQL时,请使用并检查接收到的输入类型是否为您期望的类型(字符串,数字等),并且可以确定可以安全地将其用作输入…对吗? 好吧,问题是: 转义将在其中使用的字符串的最佳方法是什么? 如果电子邮件收件人将是在文本字段中输入的电子邮件地址,那么我应该注意哪些事项以避免注入或利用? 我有一个很好的主意,该如何做,但是我正在研究有关此主题的最佳实践,以了解是否遗漏了某些东西,或者

  • 我试图使用二元运算符来比较两个值: 现在,我收到一条失败消息:二进制运算符“==”不能应用于unichar或String类型的操作数。我还尝试转换字符: 不工作...

  • 问题内容: 让我们来一个带有以下代码的file.js: 现在,我们有另一个JS文件,我们在其中执行以下操作: 在r1情况下,它按预期工作-r1包含对新创建对象的引用。 在r2情况下,它不起作用-r2从file.js中获取对module.exports的引用。 目的是通过调用func()构造函数来创建一个新对象。当然,我也可以用等于r1的方式来做: 但是,我不明白为什么r2的行为方式与r1不同。 围

  • 我试图在EventEmitter上使用一些简单的操作符(来自FormModel.valueChanges),但我不知道应该如何实现。 EventEmitter类从Subject扩展而来

  • 问题内容: 在Oracle中使用SQL运算符时,如何转义通配符(和)? 我今天遇到一个愚蠢的问题。我需要使用来搜索varchar列上是否存在下划线。正如预期的那样,它不起作用- 因为根据SQL,下划线是通配符。这是我的(简化)代码: 我在PostgreSQL中尝试了以下查询,它们返回了我想要的行: 不幸的是,它在Oracle 12c中不起作用。是否有“标准”的转义通配符方式?还是至少在Oracle