如何在LIKE子句中转义方括号?

时间:2009-01-13 15:53:41

标签: sql-server tsql escaping character sql-like

我正在尝试使用like来过滤带有存储过程的项目。该列是varchar(15)。我试图过滤的项目名称中包含方括号。

例如:WC[R]S123456

如果我执行LIKE 'WC[R]S123456',它将不会返回任何内容。

我找到了一些关于ESCAPE关键字与LIKE一起使用的信息,但我不明白如何使用它将方括号视为常规字符串。

10 个答案:

答案 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)

根据documentation

  

您可以使用通配符模式匹配字符作为文字   字符。要将通配符用作文字字符,   将通配符括在括号中。

您需要转义这三个字符%_[

'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识别涉及左括号的模式的方法。