我正在尝试使用like来过滤带有存储过程的项目。该列是varchar(15)。我试图过滤的项目名称中包含方括号。
例如:WC[R]S123456
。
如果我执行LIKE 'WC[R]S123456'
,它将不会返回任何内容。
我找到了一些关于ESCAPE
关键字与LIKE
一起使用的信息,但我不明白如何使用它将方括号视为常规字符串。
答案 0 :(得分:287)
LIKE 'WC[[]R]S123456'
或
LIKE 'WC\[R]S123456' ESCAPE '\'
应该工作。
答案 1 :(得分:104)
假设您要匹配文字its[brac]et
。
只有与]
配对时,您才需要转义[
,因为它具有特殊含义。
因此,转义[
足以解决问题。您可以通过将<{em} [
替换为[[]
来逃避。{/ p>
答案 2 :(得分:27)
我需要从查询中排除以下划线开头的名称,所以我最终得到了这个:
WHERE b.[name] not like '\_%' escape '\' -- use \ as the escape character
答案 3 :(得分:18)
以下是我实际使用的内容:
like 'WC![R]S123456' ESCAPE '!'
答案 4 :(得分:10)
如果您需要搜索%和_等特殊字符(通常是通配符),则使用ESCAPE关键字。如果指定ESCAPE,SQL将逐字搜索字符%和_。
Here's a good article with some more examples
SELECT columns FROM table WHERE
column LIKE '%[[]SQL Server Driver]%'
-- or
SELECT columns FROM table WHERE
column LIKE '%\[SQL Server Driver]%' ESCAPE '\'
答案 5 :(得分:3)
您可以使用通配符模式匹配字符作为文字 字符。要将通配符用作文字字符, 将通配符括在括号中。
您需要转义这三个字符%_[
:
'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
答案 6 :(得分:2)
如果您需要转义特殊字符,例如'_'(下划线),就像我的情况一样,并且您不愿意/无法定义ESCAPE子句,您可能希望用方括号'['和']'括起特殊字符。
这解释了“怪异”字符串'[[]'的含义 - 它只是包含带有方括号的'['字符,有效地转义它。< / p>
我的用例是指定带有下划线的存储过程的名称,作为Profiler的过滤条件。所以我在TextData LIKE字段中输入[_] [_] [_]存储[_]过程%'的字符串'%name [_],它给了我想要实现的跟踪结果。
以下是文档中的一个很好的示例: LIKE (Transact-SQL) - Using Wildcard Characters As Literals
答案 7 :(得分:1)
除了键盘上的'\'或其他字符外,您还可以使用键盘上没有的特殊字符。如果您不希望用户输入意外地用作转义字符,则可能需要使用此用例。
答案 8 :(得分:0)
使用以下内容。
对于要按原样搜索的用户输入,请使用escape,因为它需要对所有特殊字符进行以下替换(下面将涵盖所有SQL Server)。
这里单引号&#34;&#39;&#34;不被认为是因为它不影响like子句,因为它是字符串连接的问题。
&#34; - &#34; &安培; &#34; ^&#34; &安培; &#34;]&#34;我们正在逃避&#34; [&#34;。
String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");
然后,在SQL Query中它应该如下。 (在参数化查询中,字符串可以在上面的替换后添加模式)。
搜索确切的字符串。
like 'FormattedString' ESCAPE 'ð'
搜索以字符串开头
like '%FormattedString' ESCAPE 'ð'
使用字符串
搜索结束like 'FormattedString%' ESCAPE 'ð'
搜索包含字符串
like '%FormattedString%' ESCAPE 'ð'
以及其他模式匹配等。但直接用户输入需要按上述格式进行格式化。
答案 9 :(得分:0)
这是一个问题,
LIKE 'WC[[]R]S123456'
和:
LIKE 'WC\[R]S123456' ESCAPE '\'
两者均适用于SQL Server,但均不适用于Oracle。
似乎没有ISO / IEC 9075识别涉及左括号的模式的方法。