280

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

例如: WC[R]S123456

如果我这样做,LIKE 'WC[R]S123456'它不会返回任何东西。

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

4

10 回答 10

380
LIKE 'WC[[]R]S123456' 

或者

LIKE 'WC\[R]S123456' ESCAPE '\'

应该管用。

于 2009-01-13T15:56:17.800 回答
147

假设您要匹配文字its[brac]et

您不需要转义 ,]因为它仅在与 配对时才具有特殊含义[

因此,逃避[足以解决问题。您可以[ 通过将其替换为 [[].

于 2011-01-18T09:52:04.610 回答
30

我需要从查询中排除以下划线开头的名称,所以我最终得到了这个:

WHERE b.[name] not like '\_%' escape '\'  -- use \ as the escape character
于 2009-04-30T23:51:51.473 回答
22

这是我实际使用的:

like 'WC![R]S123456' ESCAPE '!'
于 2009-01-13T16:03:07.163 回答
17

如果您需要搜索 % 和 _ 等通常是通配符的特殊字符,则使用 E​​SCAPE 关键字。如果指定 ESCAPE,SQL 将按字面意思搜索字符 % 和 _。

这是一篇很好的文章,还有更多示例

SELECT columns FROM table WHERE 
    column LIKE '%[[]SQL Server Driver]%' 

-- or 

SELECT columns FROM table WHERE 
    column LIKE '%\[SQL Server Driver]%' ESCAPE '\'
于 2009-01-13T16:03:40.810 回答
6

如果您需要转义像“_”(下划线)这样的特殊字符,就像我的情况一样,并且您不愿意/不能定义 ESCAPE 子句,您可能希望用方括号'[将特殊字符括起来'']'

这解释了“奇怪”字符串'[[]'的含义——它只是将'['字符包含在方括号中,有效地将其转义。

我的用例是指定带有下划线的存储过程的名称作为 Profiler 的过滤条件。因此,我将字符串'%name[_]of[_]a[_]stored[_]procedure%'放在 TextData LIKE 字段中,它给了我想要实现的跟踪结果。

这是文档中的一个很好的示例: LIKE (Transact-SQL) - Using Wildcard Characters As Literals

于 2017-02-09T11:08:12.840 回答
5

根据文件

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

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

'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
于 2017-10-12T13:24:49.140 回答
1

除了键盘上的“\”或其他字符,您还可以使用键盘上没有的特殊字符。根据您的用例,如果您不希望用户输入意外用作转义字符,这可能是必要的。

于 2013-01-30T17:33:43.197 回答
1

有一个问题,而:

LIKE 'WC[[]R]S123456' 

和:

LIKE 'WC\[R]S123456' ESCAPE '\'

两者都适用于 SQL Server,但都不适用于 Oracle。

似乎没有 ISO/IEC 9075 方法来识别涉及左大括号的模式。

于 2019-12-05T12:54:45.010 回答
0

使用跟随。

对于要按原样搜索的用户输入,请使用转义,因为它需要以下替换所有特殊字符(以下涵盖所有 SQL Server)。

这里不采用单引号“'”,因为它不会影响like子句,因为它是字符串连接的问题。

不需要“-”和“^”和“]”替换,因为我们正在转义“[”。

String FormattedString = "UserString".Replace("ð","ðð").Replace("_", "ð_").Replace("%", "ð%").Replace("[", "ð[");

然后,在 SQL Query 中应该如下所示。(在参数化查询中,字符串可以在上述替换后添加模式)。

搜索确切的字符串。

like 'FormattedString' ESCAPE 'ð'

从字符串开始搜索

like '%FormattedString' ESCAPE 'ð'

以字符串结尾搜索

like 'FormattedString%' ESCAPE 'ð'

用字符串搜索包含

like '%FormattedString%' ESCAPE 'ð'

等等其他模式匹配。但是直接用户输入需要如上所述格式化。

于 2018-06-11T12:35:22.387 回答