我怎样才能逃避like子句中括号?
-
22-07-2019 - |
题
我试图用于过滤与使用类似的存储过程的项目。列是一个varchar(15)。我想过滤的项目有方括号中的名字。
例如:WC[R]S123456
如果我做了LIKE 'WC[R]S123456'
它不会返回任何东西。
我发现使用具有ESCAPE
的LIKE
关键字的一些信息,但我不知道如何使用它来治疗方括号作为一个普通字符串。
解决方案
LIKE 'WC[[]R]S123456'
或
LIKE 'WC\[R]S123456' ESCAPE '\'
应该工作。
其他提示
让我们说你要匹配的文字its[brac]et
。
您不必逃避]
,因为它只有当它与[
配对特殊的意义。
<强>因此逸出[
足以解决问题。您可以逃脱[
通过用替换它 [[]
。
我需要排除与查询下划线开始的名字,所以我结束了这一点:
WHERE b.[name] not like '\_%' escape '\' -- use \ as the escape character
下面是我实际使用:
like 'WC![R]S123456' ESCAPE '!'
在ESCAPE关键字,如果你需要搜索特殊字符,如%和_,这通常是通配符使用。如果指定ESCAPE,SQL将逐字搜索的字符%和_。
这里的一些更多的例子 好文章p>
SELECT columns FROM table WHERE
column LIKE '%[[]SQL Server Driver]%'
-- or
SELECT columns FROM table WHERE
column LIKE '%\[SQL Server Driver]%' ESCAPE '\'
如果您需要转义特殊字符例如“_” (下划线),因为它是在我的情况下,你都不愿意/不能够定义例外条款,您不妨以封闭用方括号的 '['和<强> ']'强>
的特殊字符这解释了 “怪异” 字符串的意义的 '[[]'强> - 它只是涵盖的 '['强>用方括号字符,有效地逸出它<。 / p>
我的用例是指定与在它下划线作为过滤标准的探查存储过程的名称。所以,我已经把字符串 '%名称[_]的[_]一个[_]存储[_]过程%' 的LIKE的TextData领域,它给了我跟踪的结果,我想实现的。 下面是从文档一个很好的例子:
LIKE(的Transact-SQL) - 使用通配符作为文字
根据文档一个>:
可以使用通配符模式匹配字符如文字 字符。要使用通配符作为文字字符, 括在括号内的通配符。
您需要逃离这三个字符%_[
:
'5%' LIKE '5[%]' -- true
'5$' LIKE '5[%]' -- false
'foo_bar' LIKE 'foo[_]bar' -- true
'foo$bar' LIKE 'foo[_]bar' -- false
'foo[bar' LIKE 'foo[[]bar' -- true
'foo]bar' LIKE 'foo]bar' -- true
而不是“\”或键盘上的其他字符,还可以使用特殊字符不在键盘上。根据o您的使用情况下,这可能是必要的,如果你不希望用户输入意外地被用作转义字符做。
使用以下强>
有关的用户输入来搜索,因为它是使用逃逸,因为其将需要以下替换所有的特殊字符(下面覆盖所有的SQL Server)。
下面单引号“'”不采取,因为它不象条款影响,因为它是字符串连接的问题。
“ - ”。& “^” 和 “]” 取代不需要因为我们逃逸 “[”
String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");
然后,在SQL查询它应该是如下。 (在参数化查询中,可以与上述更换后的图案被添加字符串)。
要搜索完全匹配的字符串。
like 'FormattedString' ESCAPE 'ð'
要搜索与字符串启动
like '%FormattedString' ESCAPE 'ð'
要搜索与串结束
like 'FormattedString%' ESCAPE 'ð'
要搜索的字符串与包含
like '%FormattedString%' ESCAPE 'ð'
等其它模式匹配。但直接用户输入需要如上述那样格式化。